带有 flutter 回调的报警服务
Alarm service with flutter callback
我正在尝试创建一个带有回调的 alarmservice 来 flutter。我尝试了现有的 alarm_manager for flutter 但它没有编译。我需要定期在后台检查用户的位置,并在满足某些条件时提醒用户。警报在 Flutter 上(Dart 回调方法)。
我使用 MethodChannel 创建了对 flutter dart 代码的回调。但是当我尝试将 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 回调方法,我需要访问报警服务中的 flutter 视图。我不确定如何将它传递到那里。
如果有一种方法可以从 WorkManager 调用 dart 回调,那就更好了。
如有任何帮助,我们将不胜感激。
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
});
我正在尝试创建一个带有回调的 alarmservice 来 flutter。我尝试了现有的 alarm_manager for flutter 但它没有编译。我需要定期在后台检查用户的位置,并在满足某些条件时提醒用户。警报在 Flutter 上(Dart 回调方法)。
我使用 MethodChannel 创建了对 flutter dart 代码的回调。但是当我尝试将 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 回调方法,我需要访问报警服务中的 flutter 视图。我不确定如何将它传递到那里。
如果有一种方法可以从 WorkManager 调用 dart 回调,那就更好了。
如有任何帮助,我们将不胜感激。
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
});