Flutter插件:从Android BroadcastReceiver发送数据到Flutter代码

2024-06-23

我正在开发一个 Flutter 插件(仅适用于 Android),当设备连接到特定的蓝牙设备时,它会自动执行 Flutter 任务。

这是我在中所做的Android插件侧面:

  1. 在清单中,我注册了一个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>
  1. 在我的“FlutterPlugin”类中,我初始化了一个EventChannel并设置一个StreamHandler。然后,我保留了一个参考EventSink中提供的onListen的功能StreamHandler。这允许我将数据从插件的 Android 端发送到插件的 Flutter 端。
class 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
    }

}
  1. 在 - 的里面onReceive我的功能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")
        }
    }

}

这是我在中所做的Flutter插件侧面:

  1. 我设置了一个EventChannel它将侦听传递给的任何消息EventSink.
EventChannel('event_channel_bluetooth_event').receiveBroadcastStream().listen(
  (data) {
    // A bluetooth event happened
  },
);

当应用程序运行时(在前台和后台),一切都完美运行。 但是,如果应用程序被终止,BluetoothBroadcastReceiver(在插件的Android端)无法将任何数据传递到插件的Flutter端,因为EventChannel未初始化。

我找不到任何方法来“唤醒”插件的 Flutter 端(从而初始化EventChannel) 当。。。的时候BroadcastReceiver被触发。

有人能帮我吗?

预先非常感谢


我终于在 Medium 上找到了一篇非常有趣的文章,解释了如何在应用程序终止后将数据从本机 (Android) 代码发送到 Dart:https://medium.com/@chetan882777/initiating-calls-to-dart-from-the-native-side-in-the-background-with-flutter-plugin-7d46aed32c47 https://medium.com/@chetan882777/initiating-calls-to-dart-from-the-native-side-in-the-background-with-flutter-plugin-7d46aed32c47

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter插件:从Android BroadcastReceiver发送数据到Flutter代码 的相关文章

  • Android val 无法重新分配

    我定义了一个名为notes的变量 当我尝试从方法修改它时 android studio说 val 不能重新分配 但是 如果我像这样访问变量 我可以修改它 this notes class NoteAdapter var context Co
  • 如何在没有服务器的情况下通过套接字连接两个Android设备

    我正在尝试开发一个Android应用程序 它可以在没有服务器的情况下与其他设备进行点对点连接交换数据 所以请建议我该怎么做 先感谢您 这是一个无需服务器的 SocketProgramming 聊天的完整代码 在我的应用程序中 首先您是客户端
  • 如何在Android中访问Sqlite数据库?

    我可以在模拟器中使用 adb shell 命令访问我的 sqlite 数据库 但无法对我的 HTC Desire 手机执行相同操作 它会抛出一些权限被拒绝的消息 是否有可能访问这些数据库以进行调试 任何想法 提前致谢 您还可以在命令提示符
  • MPAndroidChart - 饼图的所有部分都是相同的颜色

    我正在使用 MPAndroidChart https github com PhilJay MPAndroidChart https github com PhilJay MPAndroidChart 库来生成饼图 我遵循了多个教程 包括
  • 域不包含在应用程序域中

    我几天来就遇到了这个问题 以前它运行得很好 但现在显示了上述错误 我无法找出我缺少的内容 如何解决这个问题 image setting image 的一部分费率审查 public static String BASE DOMAIN http
  • 如何限制可以选中的复选框数量? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 透明模糊视图模糊了下面的布局

    我有一个已设为透明的 Linearlayout 现在我正在寻找一种方法来赋予它模糊效果 因此它下面的内容会变得模糊 就像 Windows 7 Aero 外观一样 参见屏幕截图 我知道你可以做这样的模糊效果 getWindow addFlag
  • 使用 Gradle 构建未签名的 APK

    目前我正在尝试学习 Gradle 来构建 Android APK 如何在 gradle 中设置选项来构建未签名的 APK 您不必设置任何选项 只需运行常规任务即可 gradle assemble 这将在project build apk 中
  • 如何创建像Foursquare兴趣选择屏幕一样的gridview?

    我正在创建一个应用程序 要求用户选择多个兴趣 我正在尝试创建一个类似于 Foursquare 兴趣选择的屏幕类似于标签云其中可以选择多个按钮来代表用户的兴趣 我尝试创建一个 gridview 但无法实现按钮换行到下一行的效果 有没有办法通过
  • 如何在flutter中的Table内使用TableRowInkWell?

    有人用 TableRowInkWell 创建表格吗 我想要一个左边有可点击行 右边有不可点击行的表格 有没有创建漂亮表格的示例 您只能使用TableRowInkWell在 的里面TableRow or TableCell 例如 Table
  • 即使在 Scaffold 中定义了 BottomModalSheet 小部件,Flutter 中也未找到 Scaffold 错误

    我试图为测试应用程序实现 BottomModalSheet 但每次都会弹出同样的错误 说找不到脚手架 该应用程序的代码如下 该错误表明 Scaffold 是由 MaterialApp Widget 实现的 因此我删除了 MaterialAp
  • 问题:将大数据传递给第二个 Activity

    我有一个奇怪的问题 我在网上浏览但没有找到答案 我仍然是android编程的初学者 那么让我们开始吧 我想做的就是用一些数据调用第二个活动 它适用于小数据 但如果数据变大 第二个 Activity 将不会显示 第一个 Activity 将完
  • 从设备获取日期并将其转换为 GMT+4

    我正在尝试查找 Android 手机的时区 因为我想获取日期对象 但我想要 GMT 4 格式 我看到的所有其他答案都会转换来自 API 请求的时间 其时区已知 我怎样才能做到这一点 其他方法可能是将服务器传来的 GMT 4 时间转换为我设备
  • SQLite CursorWindow 限制 - 如何避免崩溃

    我必须执行查询并将结果存储在列表中 我使用的函数如下 List
  • 使用 ExoPlayer 播放 YouTube 视频 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有兴趣使用外放播放器 http developer android com guide topics
  • 适用于标准类兼容 USB 设备的 Android USB 主机模式“软模式”驱动程序

    现在既然Android API 支持直接使用 USB 设备 http developer android com guide topics connectivity usb host html 自 3 1 起 我很好奇是否有任何工作可以为一
  • android项目中视频文件放在哪里

    我有一个视频 我需要知道放置在哪里以及如何获取该视频的路径 我知道如何从 URL 添加视频 Uri uri Uri parse www abc com myVid mp4 videoView VideoView findViewById R
  • ImageView adjustViewBounds 不适用于相对布局

    我有一个ImageView并已设置其layout height为 100dp 其layout width为 wrap content 使用的绘图具有更大的实际尺寸 为 130dp 宽度 X 215dp 高度 当 的时候ImageView被放
  • 设置android中按钮的透明度

    我想在android中制作具有不同透明度级别的按钮 我使用过 android color transparent 但它使按钮 100 透明 我需要一个 70 透明的按钮 这是我正在处理的 XML 代码
  • 如何从 Activity 的包含类启动 Intent

    我正在寻找从不是 Activity 而是 Activity 类的包含对象的类启动意图的最佳方法 例如活动类 Class MainActivity extends ListActivty TestLauncher tester 以及我想从中开

随机推荐