当活动处于后台或根本没有活动时,我试图从 Android 调用 Dart 代码。例如,当警报管理器触发时。
这是我的飞镖代码:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
runApp(MyApp());
const MethodChannel _kChannel =
MethodChannel('mychannel');
_kChannel.setMethodCallHandler((call) {
if (call.method == 'method1') {
return ...;
}
if (call.method == 'method2') {
return ...;
}
return Future.value();
});
}
来自Java:
Application.channel.invokeMethod(method, arguments, new MethodChannel.Result() {...});
channel
是从我的 mainactivity 初始化的静态变量。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GeneratedPluginRegistrant.registerWith(this);
Application.channel = new MethodChannel(getFlutterView(), CHANNEL_ID);
}
这在活动处于前台时有效。但是当它在后台时,我收到以下通知:FlutterView.send called on a detached view, channel=mychannel
调用不会被执行。如何在后台从 Android 调用 Dart?
编辑:
我的用例是一个纯粹的 Android 用例。这基本上是流程:
- 警报管理器触发并接收到广播事件。Dit 是在没有库的情况下完成的。这主要发生在应用程序未处于活动状态时。
- 在广播接收器中,从 Firebase 读取一些数据并设置通知。
- 根据 Firebase 中的数据安排新警报。
在颤振/飞镖中,我已经获得了从 Firebase 获取数据的业务逻辑。显然我不想再写这些了,但现在用 Java。
我不想使用警报管理器插件和本地通知插件,因为它们都在不同的隔离区中运行,造成了麻烦。