You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用awesome_notifications提示FlutterJNI已脱离原生C++无法发送消息如何解决

错误原因

Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++ 错误本质是调用awesome_notifications相关方法时,Flutter引擎与原生Android层的绑定已经被销毁,无法完成跨层通信,常见触发场景为初始化时机错误、后台isolate调用、App进程处于回收状态等。

解决方案
  • 修正初始化时机
    必须在main()函数中runApp()执行前、WidgetsFlutterBinding.ensureInitialized()之后完成插件初始化,确保初始化时Flutter引擎已经完成和原生层的绑定。
    正确初始化代码如下:
void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 初始化awesome_notifications
  await AwesomeNotifications().initialize('resource://drawable/ic_stat_logo', [
    NotificationChannel(
      channelKey: "key1",
      channelName: "proton coders point",
      channelDescription: "notification example",
      enableLights: true,
      enableVibration: true,
      importance: NotificationImportance.High,
    )
  ]);
  runApp(const MyApp());
}
  • 调整通知发送的isolate
    不要在后台isolate(如WorkManager回调、后台定位回调、原生侧唤起的独立isolate)中直接调用createNotification,这类isolate没有和主Flutter引擎绑定,会触发JNI解绑错误。如果需要在后台逻辑中发送通知,先通过isolate通信将请求传递到主isolate后再执行发送操作。
  • 检查Android端配置与权限
    • 确保AndroidManifest.xml中已经声明了通知相关权限,Android 13及以上版本需要在发送通知前动态请求POST_NOTIFICATIONS权限
    • 避免在App被用户划退、进程被系统回收的场景下调用通知发送逻辑
  • 清理缓存匹配版本
    • 检查awesome_notifications插件版本与当前Flutter版本兼容:3.x版本的插件需要Flutter 3.0及以上版本支持
    • 执行flutter clean清理构建缓存,再重新编译运行项目,排除缓存导致的绑定异常

内容的提问来源于stack exchange,提问作者Naqeeb maqsood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:03