设备 GattServer 连接后停止广播

The device GattServer stops advertising after connecting to it

这是 link 的 Android GitHub 上的 GATT 服务器示例:

https://github.com/androidthings/sample-bluetooth-le-gattserver

在树莓派 3 上设置服务器非常简单。

我不明白的是,为什么 GATT 服务器会在您连接到设备然后断开连接(BLE 连接)后停止广播。

...gattserver I/GattServerActivity: BluetoothDevice CONNECTED: 67:2F:1A:B4:1F:86
...gattserver D/BluetoothGattServer: onConnectionUpdated() - Device=67:2F:1A:B4:1F:86 interval=6 latency=0 timeout=2000 status=0
...gattserver D/BluetoothGattServer: onConnectionUpdated() - Device=67:2F:1A:B4:1F:86 interval=39 latency=0 timeout=2000 status=0
...gattserver I/GattServerActivity: Read CurrentTime
...gattserver I/GattServerActivity: Read CurrentTime
...gattserver I/GattServerActivity: Read CurrentTime
...gattserver I/GattServerActivity: Read CurrentTime
...gattserver I/GattServerActivity: Read CurrentTime
...gattserver D/GattServerActivity: Config descriptor read
...gattserver I/GattServerActivity: Read LocalTimeInfo
...gattserver D/BluetoothGattServer: onServerConnectionState() - status=0 serverIf=5 device=67:2F:1A:B4:1F:86
...gattserver I/GattServerActivity: BluetoothDevice DISCONNECTED: 67:2F:1A:B4:1F:86
...gattserver I/GattServerActivity: No subscribers registered

以上是设备的 LogCat 中显示的内容。 第一行显示我的 phone 能够连接到设备。 (使用这个免费且优秀的应用程序:https://play.google.com/store/apps/details?id=no.nordicsemi.android.mcp

连接后我可以读取它的特征(读取 CurrentType、读取 LocalTimeInfo 等)

当断开 phone/app 与设备的连接时,GattServerActivity 指出我正常断开连接并继续 运行...

但是再次尝试从 phone/app 扫描设备时发现 RPi 上的 GATT 服务器已经变成僵尸...

LogCat(不在应用程序中,不在系统中)没有错误...

有人有想法吗?

问题似乎是 GATT 服务器在断开连接时没有重新开始广告?您应该可以添加一个新行 here 以重新开始投放广告。

尝试过重新开始广告,但没有用,所以我停下来重新开始,结果成功了。在树莓派 3B 上测试

@Override
    public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
        if (newState == BluetoothProfile.STATE_CONNECTED) {
            Log.i(TAG, "BluetoothDevice CONNECTED: " + device);
        } else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
            Log.i(TAG, "BluetoothDevice DISCONNECTED: " + device);
            //Remove device from any active subscriptions
            mRegisteredDevices.remove(device);
            stopAdvertising();
            startAdvertising();
        }
    }