2016-09-15 99 views
-1

奇怪的情況發生在相同的代碼爲Android 4.4.2操作系統三星和三星(A8)Android 5.1.1。Android Ble寫

if(mBluetoothGattCharacteristic==null){ 
      return; 
     } 

     byte [] mCommandData=new byte[64]; 
     mCommandData[0]=Constants.REMOTE_CMD; 
     mCommandData[1]=(byte) mRemoteCommand; 

     mBluetoothGattCharacteristic.setWriteType(BluetoothGattCharacteristic.WRITE_TYPE_NO_RESPONSE); 

     boolean isUpdated= mBluetoothGattCharacteristic.setValue(mCommandData); 
     boolean isWriteDone=mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic); 
     LogUtils.i("LOG", "Ble Write set is---"+ isUpdated + " Characteristics Write done"+ isWriteDone); 

     /** 
     * Create New Command Release Key 
     */ 

     byte [] mCommandRelease=new byte[64]; 

     mCommandRelease[0]=Constants.REMOTE_CMD; 
     mCommandData[1]=(byte)Constants.IR_KEY_RELEASE; 

     isUpdated= mBluetoothGattCharacteristic.setValue(mCommandData); 
     isWriteDone=mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic); 
     LogUtils.i("LOG", "Ble Write set is---"+ isUpdated + " Characteristics Write done"+ isWriteDone); 

在上面的代碼爲Android 4.4.2 writeCharacteristic兩個命令寫給真。

但是在android系統的情況5.1.1給它真正的第一次寫,當它繼續旁邊寫它提供虛假的writeCharacteristic

現在的解決方案我想到的是Android 5.1.1我不得不等待爲onCharacteristicWrite,然後寫下一個命令。

如果有人知道這樣的問題,並指出我是否僅發生在三星設備上?

回答

-1

現在我通過把我的下一個命令onCharacteristicWrite理清問題,

我發現,我們不應該這樣寫代碼:

BluetoothGattCharacteristic.setValue(mCommandData); 
boolean isWriteDone=mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic); 

然後再發送下一個命令:

BluetoothGattCharacteristic.setValue(mNextCommdn); 
boolean isWriteDone=mBluetoothGatt.writeCharacteristic(mBluetoothGattCharacteristic); 

因此,我們試圖對GATT配置文件執行兩次寫操作,然後只有第一個可以成功執行。

所以我寫第一個命令的結果接收我的下一個命令的基礎: 這將在onCharacteristicWrite接收。

+1

這是正確的解決方案。在Android的BLE API中,一次只能有一次優秀的GATT操作。 – Emil