gpt4 book ai didi

android - Quickblox - Flutter JNI 与 native C++ 分离

转载 作者:行者123 更新时间:2023-12-04 23:50:52 32 4
gpt4 key购买 nike

我在 Flutter 应用程序中使用 Quickblox 进行聊天。建立连接后,聊天工作正常。当应用程序发送到后台时,我按照 Quickblox 文档的建议将连接设置为关闭。但是当我重新打开我的应用程序时,它在其事件 (QBChatEvents.RECEIVED_NEW_MESSAGE) 中不再收到消息.尽管在日志中发送和接收消息,但此事件不再起作用。日志显示了这个异常,

Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++. Could not send. Channel:
这是我订阅的 Activity ,
QB.chat.subscribeChatEvent(QBChatEvents.RECEIVED_NEW_MESSAGE,
(data) {
// my implementaion here
});
我已经从他们的文档中添加了这个实现。
class _SomeScreenState extends State<SomeScreen> with WidgetsBindingObserver {

@override
initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}

@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}

@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
try {
await QB.chat.connect(userId, userPassword);
} on PlatformException catch (e) {
// Some error occured, look at the exception message for more details
}
break;
case AppLifecycleState.paused:
print("app in paused");
try {
await QB.chat.disconnect();
} on PlatformException catch (e) {
// Some error occured, look at the exception message for more details
}
break;
}
我在这里做错了什么?

最佳答案

尝试向 Flutter 发送平台消息,但 FlutterJNI 与原生 C++ 分离。无法发送。 channel :
销毁方法 channel 时出现此错误
当我们杀死应用程序并尝试从 native 代码传达 flutter 时,就会发生此运行时错误
解决方案如下:
在后台创建一个新的方法 channel ,并用这个 channel 调用 flutter 部分。
如下所示

fun  createMethodChannel(): MethodChannel? {

var backgroundMethodChannel: MethodChannel? = null;
var engine: FlutterEngine? = null;
if (getEngine() == null) {
engine = FlutterEngine(mContext!!)
// Define a DartEntrypoint
val entrypoint: DartExecutor.DartEntrypoint =
DartExecutor.DartEntrypoint.createDefault()
// Execute the DartEntrypoint within the FlutterEngine.
engine.dartExecutor.executeDartEntrypoint(entrypoint)
} else {
engine = getEngine();
}

backgroundMethodChannel = MethodChannel(engine?.dartExecutor?.binaryMessenger, "CHANNEL_NAME")
return backgroundMethodChannel
}
fun getEngine(): FlutterEngine? {
return FlutterEngineCache.getInstance().get("CHANNEL_NAME");
}

关于android - Quickblox - Flutter JNI 与 native C++ 分离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63997236/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com