2016-07-29 7 views
0

Ich versuche, Daten zwischen Android-Gerät und benutzerdefinierte Board mit BLE-Modul auszutauschen. Und ich habe einige Probleme mit der Methode characteristicsWrite() auf Android-Geräten Version 5.0 und höher. In Liebhaber Versionen characteristicsWrite() -Methode return true und ruft dann onCharacteristicsWrite() Rückruf in BleGattCallbackAndroi BLE writeCharacteristics Methode gibt immer false in Android 5.0 und höher

Schreibmethode:

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 Methode:

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

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

Aber wenn ich diesen Code auf Android ausführen Geräte v 5.0 Ergebnis der writeCharacteristic() -Methode immer false und onCharacteristicWrite() Callback nicht aufgerufen.

Kann mir jemand erklären, wie man eine Verbindung zwischen BLE-Gerät und Android 5.0+ richtig herstellt? Vielleicht brauche ich einen bestimmten Ansatz für diese Art von Geräten. Anwendung getestet auf Samsung und Lenovo Smartphones v5.0 +.

+0

Sind Sie sicher, dass Sie Ihre 'GATT'-Ebene richtig angeschlossen haben? – Jeeter

+0

Anwendung funktioniert gut mit Android-Geräten Version niedriger 5.0, also schätze ich Schicht richtig verbunden. Ich benutze dieses Tutorial um eine Verbindung herzustellen: [Android BLE] (https://developer.android.com/guide/topics/connectivity/bluetooth-le.html) –

Antwort

0

Problem gelöst. Sie müssen nur discoverServices anrufen() erneut, nachdem Sie „false“ Ergebnis writeCharacteristic Funktion erhalten:

private void sendMessageToDevice(String message) { 

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

     boolean writeResult = mBluetoothGatt.writeCharacteristic(characteristicWrite); 

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

Danach müssen Sie wieder writeCharacteristic() Funktion aufrufen und für mich zur Folge war „true“.

+0

Seltsam. Normalerweise gibt es nur dann eine falsche Antwort, wenn Sie bereits eine ausstehende GATT-Operation ausgeführt haben. In Android müssen Sie immer auf den Rückruf warten, bevor Sie eine neue gatt-Operation ausführen können. – Emil

Verwandte Themen