Android蓝牙LE拔出的设备写入成功(更快断开的方法?)

问题描述:

我正在创建一个连接到蓝牙LE设备的应用程序。一切正常,但如果设备被拔出,则需要10-15秒才能发送STATE_DISCONNECTED广播。如果我在拔出设备后尝试写入设备,我仍将其视为我的BluetoothGattCallback中的GATT_SUCCESS。Android蓝牙LE拔出的设备写入成功(更快断开的方法?)

我打算使用如果用户试图改变BLE设备上的某些东西,并且其写入失败2-3次,然后显示断开连接的屏幕(或失去连接,以便用户有更快的反馈),但是, t看起来像它的工作。有没有更快的方法检查BLE设备是否不能再被看到?

@Override 
    public void onCharacteristicWrite(BluetoothGatt gatt, 
            BluetoothGattCharacteristic characteristic, 
            int status) 
    { 
     if (status == BluetoothGatt.GATT_SUCCESS) 
     { 
      // Is true even if the device has been unplugged? 
      Log.i(TAG, "onCharacteristicWrite Success!"); 
     } else { 
      Log.i(TAG, "onCharacteristicWrite Failed!"); 
     } 
    } 
+0

您使用的是https://developer.android.com/reference/android/bluetooth/BluetoothGattCharacteristic.html#PROPERTY_WRITE_NO_RESPONSE吗? onCharacteristicWrite只有在获得写入响应时才能成功调用 – Emil

我在为客户端应用程序工作时遇到类似的问题。该应用程序仍然会显示它已连接到Ble设备,即使断开大约10-15秒钟之后。应用程序不会知道该设备已断开连接,但它仍会尝试断开连接,并在一段时间后超时。幸运的是,我们的Ble设备在每次从应用程序写入之后都会响应。所以,即使writhecharcetersitc说写入成功,我会等待Ble设备告诉我它已成功接收我的写入,从而解决了我的问题。如果您可以更改固件代码,我建议您遵循相同的方法。

+0

感谢您的建议,似乎是唯一可行的方法。 –