如何知道我的应用程序是否连接到使用 Flutter 中的 BLE 的设备?..当应用程序是信标时

How to know if my App is connected to a device using BLE in Flutter?.. when app is the beacon

所以我的 android 应用程序表现为 beacon,这意味着它将 advertising 并且其他 BLE devices 将连接到它。好吧,这就是我们项目的工作方式,所以请不要就此提出问题,因为我为什么将我的应用程序用作信标而不是扫描仪。不管怎样,它就像一个信标并开始做广告,现在我想知道是否有设备连接到它。我找不到如何做到这一点的方法。

当然,我用的是这个flutter包。 beacon_broadcast 0.3.0

这是我的代码

  void startAdvertising() {
    BeaconBroadcast beaconBroadcast = BeaconBroadcast();
    beaconBroadcast
        .setUUID(advertisingUUID)
        .setMajorId(1)
        .setMinorId(100)
        .start();
  }

首先,Flutter 只是一个 UI 工具包,不支持其他系统 API,例如蓝牙。

因此,您应该首先查看 Android API 官方提供的内容。通常在设备连接或断开连接时使用 BluetoothLeAdvertiser for advertising, one often also adds an instance of BluetoothGattServer in order to handle connections. If you have created a BluetoothGattServer using openGattServer, you will get a onConnectionStateChange 回调。这样就回答了您的问题 Android 应用如何在设备连接时得到通知。您可能还想使用相同的 API 添加 GATT 服务,以便其他设备可以与您的应用程序通信。其他替代方法是使用 GATT 客户端 API 如果它是具有 GATT 服务器的其他设备,或者您可能想使用 L2CAP CoC API.

请注意,如果开启蓝牙 off/disabled/restarted,您的 BluetoothGattServer 对象将自动消亡,您需要重新创建它。要在发生这种情况时得到通知,请使用 BluetoothAdapter.ACTION_STATE_CHANGED 的状态更改意图接收器,如本示例 中所述,以便在状态更改为 STATE_ON 时重新创建您的 BluetoothGattServer(和广告商)。

现在,既然你想用Flutter,但Flutter用的是Dart,你不能直接消费Android APIs。相反,您需要编写一个 bridge/plugin,以桥接您的 Dart 代码和 Java 代码。参见 https://docs.flutter.dev/development/platform-integration/platform-channels for a tutorial how to do this. If you're lucky, someone else might have already created such a package that does exactly what you want. Unfortunately, the beacon_broadcast package you found, only implements BluetoothLeAdvertiser and not BluetoothGattServer, as can be seen by the source code here: https://github.com/pszklarska/beacon_broadcast/tree/master/android/src/main/kotlin/pl/pszklarska/beaconbroadcast