I am trying to create an alarmservice with callback to flutter. I tried the existing alarm_manager for flutter and it doesnt compile. I need to check the location of the user in the background in a periodic time and alert the user if certain conditions are met. The alert is on Flutter(Dart callback method).

I used MethodChannel to create a callback to the flutter dart code. But when I try to pass the methodchannel to the alarm service, I am not sure how I should pass the FlutterAcitvity with it.

public class MainActivity extends FlutterActivity {
protected void onCreate(Bundle savedInstanceState) {
    MethodChannel trigger = new MethodChannel(getFlutterView(), "service:BackgroundTrigger");
    trigger.setMethodCallHandler(new CallBackWorker(getFlutterView()));

class CallBackWorker implements MethodCallHandler {
    FlutterView view;

    CallBackWorker(FlutterView view) {
        this.view = view;

    public void onMethodCall(MethodCall methodCall, MethodChannel.Result result) {
        AlarmManager mgr=(AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE);
        Intent i=new Intent(getApplicationContext(), MyService.class);
        i.putExtra("FlutterView",getFlutterView()); //This is the problem.
        PendingIntent alarmIntent = PendingIntent.getBroadcast(getApplicationContext(), 0, i, 0);

                SystemClock.elapsedRealtime() +
                        60 * 1000, alarmIntent);


In the above code when the user clicks on a button, the service:BackgroundTrigger is triggered which will register him to the alarm service by invoking the CallBackWorker.

Now to invoke the Dart callback method, I need access to the flutter view in the alarm service. I am not sure how to pass it there.

If there is a way to invoke a dart callback from a WorkManager it would be better.

Any help would be much appreciated.

Solution 1: Omatt

android_alarm_manager has been deprecated and developers are recommended to use android_alarm_manager_plus. The former is no longer being updated. On the current version of the android_alarm_manager_plus plugin, there's no need to set up MethodChannel for a simple callback. You can just call AndroidAlarmManager.periodic()

final int alarmId = 0;
await AndroidAlarmManager.periodic(const Duration(minutes: 1), 
    () {
      // Do something