带有颤振回调的报警服务

Posted

技术标签:

【中文标题】带有颤振回调的报警服务【英文标题】:Alarm service with flutter callback 【发布时间】:2019-01-27 01:53:27 【问题描述】:

我正在尝试创建一个带有颤振回调的警报服务。我尝试了现有的alarm_manager 进行颤动,但它没有编译。我需要定期在后台检查用户的位置,并在满足某些条件时提醒用户。警报在 Flutter(Dart 回调方法)上。

我使用 MethodChannel 创建了对颤振飞镖代码的回调。但是当我尝试将 methodchannel 传递给警报服务时,我不确定应该如何传递 FlutterAcitvity。

public class MainActivity extends FlutterActivity 
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    GeneratedPluginRegistrant.registerWith(this);
    MethodChannel trigger = new MethodChannel(getFlutterView(), "service:BackgroundTrigger");
    trigger.setMethodCallHandler(new CallBackWorker(getFlutterView()));


class CallBackWorker implements MethodCallHandler 
    FlutterView view;

    CallBackWorker(FlutterView view) 
        this.view = view;
    

    @Override
    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);

        mgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() +
                        60 * 1000, alarmIntent);
    

在上面的代码中,当用户点击一个按钮时,service:BackgroundTrigger 被触发,它将通过调用 CallBackWorker 将他注册到警报服务。

现在要调用 Dart 回调方法,我需要访问警报服务中的颤振视图。我不知道如何通过它。

如果有一种方法可以从 WorkManager 调用 dart 回调,那就更好了。

任何帮助将不胜感激。

【问题讨论】:

How to schedule background tasks in Flutter?的可能重复 【参考方案1】:

android_alarm_manager 已被弃用,建议开发者使用android_alarm_manager_plus。前者不再更新。在当前版本的 android_alarm_manager_plus 插件上,不需要为简单的回调设置 MethodChannel。你可以调用 AndroidAlarmManager.periodic()

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

【讨论】:

以上是关于带有颤振回调的报警服务的主要内容,如果未能解决你的问题,请参考以下文章

颤振:FlutterFcmService - 致命:找不到回调

颤振/飞镖:如何在飞镖 FFI 中使用异步回调?

颤振回调到后退按钮上的原始小部件

带有 locationListener 回调的 Android 服务

使用带有服务器回调的 http 进行 Flutter 飞镖测试

带有错误回调函数的 Ajax 响应