2016-05-11 3 views
0

Warum funktioniert es nicht? Das "#" wird korrekt gesendet, aber nicht gelesen (das andere Gerät liest das Zeichen und sendet es). Ich denke, ich kann die zwei folgenden Funktionen nicht in der gleichen Zeit ausführen, aber warum?Bluetooth Low Energy Android Studio

Read_Data.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //Write 
      Data_BLE_Write("#"); 

      //Read 
      Data_BLE_Read(); 

      Toast.makeText(getApplicationContext(), "Data !!", Toast.LENGTH_SHORT).show(); 
     } 
    }); 

Aber wenn ich Data_Ble_Read und Data_Ble_Write mit zwei Tasten Lehrzeichen, dann ist es so arbeiten, ich verstehe nicht, warum ?? Meine Funktionen:

private void Data_BLE_Write(String Caract){ 
    if (mGattCharacteristics != null) { 
     final BluetoothGattCharacteristic characteristic_W = 
       mGattCharacteristics.get(3).get(1); 
     final int charaProp = characteristic_W.getProperties(); 

     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) { 
      mNotifyCharacteristic = characteristic_W; 
      mBluetoothLeService.setCharacteristicNotification(
        characteristic_W, true); 
     } 
     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_WRITE) > 0) { 
      String str = Caract; 
      byte[] strBytes = str.getBytes(); 
      characteristic_W.setValue(strBytes); 
      mBluetoothLeService.writeCaracteristic(characteristic_W); 
     } 
    } 
} 
    private String Data_BLE_Read(){ 
    Data_Read_Ble = ""; 
    if (mGattCharacteristics != null) { 
     final BluetoothGattCharacteristic characteristic = 
       mGattCharacteristics.get(2).get(6); 
     final int charaProp = characteristic.getProperties(); 
     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_READ) > 0) { 
      // If there is an active notification on a characteristic, clear 
      // it first so it doesn't update the data field on the user interface. 
      if (mNotifyCharacteristic != null) { 
       mBluetoothLeService.setCharacteristicNotification(
         mNotifyCharacteristic, false); 
       mNotifyCharacteristic = null; 
      } 
      mBluetoothLeService.readCharacteristic(characteristic); 
     } 
     if ((charaProp | BluetoothGattCharacteristic.PROPERTY_NOTIFY) > 0) { 
      mNotifyCharacteristic = characteristic; 
      mBluetoothLeService.setCharacteristicNotification(
        characteristic, true); 
     } 
     Data_BLE_Write("&"); 
    } 
    return Data_Read_Ble; 
} 
+0

"Aber wenn ich Data_Ble_Read und Data_Ble_Write mit zwei Tasten trennen, funktioniert es so, dass ich nicht verstehe warum?" <- Wahrscheinlich, weil es dann genug Verzögerung zwischen dem Schreiben und dem Lesen gibt. Wenn sie unter dem gleichen Knopf sind, geschieht das Lesen direkt nach dem Schreiben. –

Antwort

1

Der ble Stack ermöglicht nur eine Aufgabe in der gleichen Zeit, so dass im Grunde Sie die Schreibaufgabe mit Leseaufgabe werden abgebrochen. Sie sollten mit der nächsten Aufgabe warten, bis die Aufgabe beendet ist. In Ihrem Fall sollten Sie warten, bis die Eigenschaft gelesen wird, bevor Sie mit dem Schreiben beginnen.

Hoffe, das hilft.

Verwandte Themen