2016-07-29 14 views
0

アンドロイドデバイスとカスタムボードの間でBLEモジュールを使用してデータを交換しようとしています。そして、私は、Androidデバイスバージョン5.0以上でcharacteristicsWrite()メソッドを使用していくつかの問題を抱えています。恋人のバージョンではcharacteristicsWrite()メソッドの戻り値の真とは、BleGattCallbackで()コールバックonCharacteristicsWriteを呼び出しアンドロイドBLE writeCharacteristicsメソッドは、Android 5.0以降で常にfalseを返します

書き込み方法:

private void sendMessageToDevice(String message) { 

    byte nullByte = 0x00; 
    byte[] temp = message.getBytes(); 
    byte[] tx = new byte[temp.length + 1]; 
    tx[tx.length - 1] = nullByte; 

    System.arraycopy(temp, 0, tx, 0, temp.length); 

    characteristicWrite.setValue(tx); 

    boolean writeResult = mBluetoothGatt.writeCharacteristic(characteristicWrite); 

    Log.d(LOG_TAG, "writeResult"); //true 
} 

onCharacteristicsWrite方法:

@Override 
    public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 
     super.onCharacteristicWrite(gatt, characteristic, status); 

     Log.d(LOG_TAG, status); // status = 0 - GATT_SUCCESS 
    } 

しかし、私は、Android上でこのコードを実行するときデバイスv writeCharacteristic()メソッドの結果は常にfalseであり、onCharacteristicWrite()コールバックは呼び出されません。

BLEデバイスとAndroid 5.0+の間の接続を正しく確立する方法を教えてもらえますか?たぶん私はこのタイプのデバイスのためのいくつかの特定のアプローチが必要です。 アプリケーションはSamsungとLenovoスマートフォンv5.0 +でテスト済みです。

+0

'GATT'レイヤーを正しく接続してもよろしいですか? – Jeeter

+0

アプリケーションは、アンドロイドデバイスのバージョンが5.0より低いので、レイヤーが正しく接続されていると思います。私は接続を作成するためにこのtutoriallを使用しています:[Android BLE](https://developer.android.com/guide/topics/connectivity/bluetooth-le.html) –

答えて

0

問題を解決しました。あなたは再びwriteCharacteristic()関数を呼び出す必要があり、私のために、結果が「真」であったその後

private void sendMessageToDevice(String message) { 

     ............. 

     boolean writeResult = mBluetoothGatt.writeCharacteristic(characteristicWrite); 

     if(!writeResult) 
      mBluetoothGatt.discoverServices(); 
} 

:あなたはちょうどあなたがwriteCharacteristic機能の「偽」の結果を取得した後、再び)(discoverServicesを呼び出す必要があります。

+0

Strange。通常、falseを返す唯一の時間は、すでに保留中のgatt操作がある場合です。 Androidでは、新しいgatt操作を実行する前にコールバックを待つ必要があります。 – Emil

関連する問題