I need to pass data from the below class to my flutter app where the data is only available when an incoming call event happens. i need to pass this data(mobileNumber) to flutter (if possible i need to pass data even the flutter app is terminated)
BroadcastReciever.java
package com.ashbu.flutterappbackground;
...
public class MyBroadcastReceiver extends BroadcastReceiver {
String phoneNumber;
@Override
public void onReceive(final Context context, Intent intent) {
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
telephony.listen(new PhoneStateListener(){
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
phoneNumber = incomingNumber;
Toast.makeText(context, "TeleDuce Customer "+ incomingNumber,
Toast.LENGTH_LONG).show();
}
},PhoneStateListener.LISTEN_CALL_STATE);
}
public String getData() {
String number = null;
if (phoneNumber != null) {
number = phoneNumber;
}else {
number = "noData";
}
return number;
}
} from the above code, i need to pass incomingNumber to flutter. if possible - Share the data even the app is closed.
MainActivity.java
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.dev/getNumber";
AlarmManager alarmManager;
PendingIntent pendingIntent;
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
super.configureFlutterEngine(flutterEngine);
alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent alarmIntent = new Intent(this, MyService.class);
pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
.setMethodCallHandler(
(call, result) -> {
// Note: this method is invoked on the main thread.
if (call.method.equals("getMobileNumber")) {
startAlarm();
MyBroadcastReceiver dataGEt = new MyBroadcastReceiver();
System.out.println(dataGEt.getData());
result.success(dataGEt.getData());
} else {
cancelAlarm();
}
}
);
}
private void startAlarm() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
alarmManager.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, 0, pendingIntent);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, 0, pendingIntent);
} else {
alarmManager.set(AlarmManager.RTC_WAKEUP, 0, pendingIntent);
}
}
private void cancelAlarm() {
alarmManager.cancel(pendingIntent);
Toast.makeText(getApplicationContext(), "Alarm Cancelled", Toast.LENGTH_LONG).show();
}
}
Currently the above code will work even the app is terminated. But i don't know if the flutter will accept the data after the app is terminated