2017-04-04 106 views
1

我正在創建一個連接到藍牙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

回答

1

我在爲客戶端應用程序工作時遇到類似的問題。該應用程序仍然會顯示它已連接到Ble設備,即使斷開大約10-15秒鐘之後。應用程序不會知道該設備已斷開連接,但它仍會嘗試斷開連接,並在一段時間後超時。幸運的是,我們的Ble設備在每次從應用程序寫入之後都會響應。所以,即使writhecharcetersitc說寫入成功,我會等待Ble設備告訴我它已成功接收我的寫入,從而解決了我的問題。如果您可以更改固件代碼,我建議您遵循相同的方法。

+0

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