应该在什么时候停止BLE广告?

时间:2017-04-13 15:46:01

标签: android bluetooth-lowenergy

我听说外围设备停止广告是一种很好的做法,因为它不再需要新的连接,以节省电池费用。

所以,在onConnectionStateChange内部的外围设备上,我这样称呼advertiser.stopAdvertising(advertiseCallback)

 private final BluetoothGattServerCallback bluetoothServerCallback = new BluetoothGattServerCallback()  {

    @Override
    public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
        Log.d(TAG, String.format("onConnectionStateChange status=%d, newState=%d", status, newState));
        super.onConnectionStateChange(device, status, newState);

        // advertiser should be turned off when connection state changes
        // but the problem is - this breaks the client side service discovery
        // so, I'm not sure what would be the right moment to stop advertising

        advertiser.stopAdvertising(advertiseCallback);
    }

在我与onConnectionStateChange连接并接收BluetoothProfile.STATE_CONNECTED后,在客户端,我致电

 connectedPeripheralGatt.discoverServices()

并等待onServicesDiscovered回调。

问题在于,如果外围设备已停止投放广告,onServicesDiscovered会收到状态代码257(这是通用模糊GATT_FAILURE的常量),并且未发现任何服务。

如果我发表评论stopAdvertising,则客户端onServicesDiscovered按预期工作,但外围设备继续广告,但我不再需要它。

它应该如何运作?如何在不再需要时停止广告?

两个设备都没有配对/绑定。我不确定配对设备会发生什么 - 即使由于真实的MAC地址而停止广告,onServicesDiscovered也可能会有效,但我想让它在没有配对的情况下工作。

0 个答案:

没有答案