如何知道我的应用程序是否连接到Flutter中使用BLE的设备?当应用程序是灯塔



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

当然,我使用的是这个颤振软件包。beacon_broadcast 0.3.0

这是我的代码

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

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

因此,你应该首先看看官方的Android API提供了什么。通常在使用BluetoothLeAdvertiser进行广告时,通常还会添加BluetoothGattServer的实例来处理连接。如果您使用openGattServer创建了BluetoothGattServer,那么每当设备连接或断开连接时,您都会收到onConnectionStateChange回调。因此,这就回答了你的问题:当设备连接时,安卓应用程序如何得到通知。您可能还想使用相同的API添加GATT服务,以便其他设备可以与您的应用程序通信。其他替代方案是使用GATT客户端API,如果它是具有GATT服务器的其他设备,或者您可能希望使用L2CAP CoC API。

请注意,如果蓝牙被关闭/禁用/重新启动,您的BluetoothGattServer对象将自动失效,您需要重新创建它。要在发生这种情况时得到通知,请使用BluetoothAdapter.ACTION_STATE_CHANGED的状态更改意图接收器,如本例所述https://stackoverflow.com/a/9694138/556495以在状态更改为STATE_ON时重新创建BluetoothGattServer(和广告商(。

现在,由于你想使用Flutter,但Flutter使用Dart,你不能直接使用Android API。相反,您需要编写一个桥接器/插件来桥接您的Dart代码和Java代码。看见https://docs.flutter.dev/development/platform-integration/platform-channels获取如何执行此操作的教程。如果你幸运的话,其他人可能已经创建了这样一个包,它完全符合你的要求。不幸的是,您找到的beacon_broadcast包只实现了BluetoothLeAdvertiser,而没有实现BluetoothGattServer,从这里的源代码可以看出:https://github.com/pszklarska/beacon_broadcast/tree/master/android/src/main/kotlin/pl/pszklarska/beaconbroadcast.

相关内容

最新更新