Val*_*tin 10 android broadcastreceiver flutter flutter-plugin
我正在开发一个 Flutter 插件(仅适用于 Android),当设备连接到特定的蓝牙设备时,它会自动执行 Flutter 任务。
以下是我在插件的Android端所做的事情:
BroadcastReceiver监听蓝牙事件的函数。<receiver android:name=".BluetoothBroadcastReceiver">
<intent-filter>
<action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
<action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
EventChannel并设置了StreamHandler. 然后,我保留的函数EventSink中提供的的引用。这允许我将数据从插件的 Android 端发送到插件的 Flutter 端。onListenStreamHandlerclass BluetoothPlugin : FlutterPlugin {
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
EventChannel(flutterPluginBinding.binaryMessenger, "event_channel_bluetooth_event")
.setStreamHandler(object : StreamHandler {
override fun onListen(arguments: Any?, eventSink: EventChannel.EventSink) {
BluetoothPlugin.eventSink = eventSink
}
override fun onCancel(arguments: Any?) {}
})
}
companion object {
var eventSink: EventChannel.EventSink? = null
}
}
Run Code Online (Sandbox Code Playgroud)
onReceivemy 的函数中BroadCastReceiver,我使用 来EventSink通知插件的 Flutter 端发生了蓝牙事件。class BluetoothReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
if (intent.action == BluetoothDevice.ACTION_ACL_CONNECTED) {
BluetoothPlugin.eventSink?.success("Bluetooth device is connected")
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我在插件的Flutter端所做的事情:
EventChannel将侦听传递到EventSink.EventChannel('event_channel_bluetooth_event').receiveBroadcastStream().listen(
(data) {
// A bluetooth event happened
},
);
Run Code Online (Sandbox Code Playgroud)
当应用程序运行时(在前台和后台),一切都完美运行。但是,如果应用程序被终止,BluetoothBroadcastReceiver(在插件的 Android 端)将无法将任何数据传递到插件的 Flutter 端,因为EventChannel尚未初始化。
EventChannel当触发时,我找不到任何方法来“唤醒”插件的 Flutter 端(从而初始化)BroadcastReceiver。
有人能帮我吗?
预先非常感谢
我终于在 Medium 上找到了一篇非常有趣的文章,解释了如何在应用程序终止后将数据从本机(Android)代码发送到 Dart: https: //medium.com/@chetan882777/initiating-calls-to-dart-from- the-native-side-in-the-background-with-flutter-plugin-7d46aed32c47
| 归档时间: |
|
| 查看次数: |
2031 次 |
| 最近记录: |