android - Android 上的 Flutter:我可以在应用处于后台时调用自定义 MethodChannel 吗?
问题描述
我创建了一个自定义 MethodChannel“com.example.app/widget”,它在收到 Firebase 云消息后更新 Android 上的主屏幕小部件。在应用程序处于前台时调用它时运行良好,但我也想在应用程序关闭或在后台接收到 Firebase 云消息时调用它。
当应用程序在后台时,它会给我一个 MissingPluginException 错误,如下所示:
E/flutter (28540): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: MissingPluginException(No implementation found for method updateFromFlutter on channel com.example.app/widget)
E/flutter (28540): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:157:7)
... 等等。还有很多关于 MissingPluginException 错误的其他线程涉及将插件添加到注册表,但我无法找到任何解决不属于另一个插件的自定义 MethodChannels 的线程。是否可以将我的自定义 MethodChannel 添加到注册表或执行类似的操作以使 Dart 代码能够在后台从该通道调用方法?
我已经尝试使用 workmanager 和 android_alarm_manager 并且它们本身似乎运行良好,但是使用我的自定义频道它们仍然无法通过此块。
我的 MainActivity.kt 中包含方法详细信息:
class MainActivity: FlutterActivity(), MethodChannel.MethodCallHandler {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
val channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "com.example.app/widget")
channel.setMethodCallHandler(this)
}
override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) {
when (call.method) {
"updateFromFlutter" -> {
val views = RemoteViews(context.packageName, R.layout.appwidget).apply {
setTextViewText(R.id.text, call.argument("text"))
}
val manager = AppWidgetManager.getInstance(this)
manager.updateAppWidget(call.argument("idNumber"), views)
}
}
}
}
然后在 main.dart 我打电话:
Future<void> updateAndroidWidget(String text) async {
WidgetsFlutterBinding.ensureInitialized();
const MethodChannel platform = MethodChannel('com.example.app/widget');
try {
platform.invokeMethod("updateFromFlutter", {
"text": text,
"idNumber": savedPreferences.androidWidgetID
});
} catch (e) {
print("failed: $e");
}
}
我已经有了 Flutter Android Embedding V2(Flutter 版本 >= 1.12)。
任何帮助是极大的赞赏。
解决方案
推荐阅读
- java - 如何修复线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0 error 在下面的程序中?
- mysql - 像另一个表 S2 一样创建表 S1
- javascript - React 组件事件处理函数没有收到来自 Redux Store 的最新值
- amazon-web-services - 如何使用 S3 创建仅限会员的页面?
- python - 为什么在使用 Else 而不是 Elif 时会出现语法错误?
- python - Pandas df.mode ValueError:错误传递的项目数 5,位置暗示 1
- android - 系统服务在 onCreate() 之前对活动不可用,Android RecyclerView 在 Kotlin 片段中
- java - 创建exe文件时出现异常
- asp.net - Blazor - 在 mousedown 事件后用鼠标移动时关闭文本选择
- html - 如何从 json 对象呈现 html 表