5

Ich habe eine Android (Glass) Anwendung schreiben, die als BLE zentralen wirkt und eine Verbindung zu einem BLE peripheren (das ist ein iOS-Gerät Core-Bluetooth). Ich versuche zu lesen von und schreiben an die Peripherie.Android BLE: Kann keine Eigenschaft (keine PROPERTY_WRITE)

Lesen funktioniert gut (und das Empfangen von Benachrichtigungen funktioniert auch gut).

Ich schaffte es jedoch nicht, ein Merkmal zu schreiben. Hier ist mein Code:

@Override 
public void onServicesDiscovered(BluetoothGatt gatt, int status) { 
    if (status == BluetoothGatt.GATT_SUCCESS) { 
    BluetoothGattService bse = gatt.getService(TRANSFER_SERVICE_UUID); 
    BluetoothGattCharacteristic bgc = bse.getCharacteristic(TRANSFER_CHARACTERISTIC_UUID); 
    bgc.setValue("Hello"); 
    boolean writeOk = gatt.writeCharacteristic(bgc); 
    } 
} 

@Override 
public void onCharacteristicWrite(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) { 
    // never called 
} 

writeOk ist immer false. Ich habe es ausgepackt und herausgefunden, dass der Grund die Eigenschaften sind. bgc.getProperties() gibt immer 50 zurück, egal welche Eigenschaften auf der iOS-Seite eingestellt sind. 50 ist PROPERTY_READ, PROPERTY_NOTIFY und PROPERTY_INDICATE, aber seine PROPERTY_WRITE fehlt, so BluetoothGatt.writeCharacteristic() sofort beendet:

public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) { 
    if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0 
     && (characteristic.getProperties() & 
      BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) return false; 
... 
} 

Es scheint mir, dass die Eigenschaften nicht korrekt aus dem iOS Peripherie auf die Android zentrale übertragen. Wenn Sie eine iOS-Zentrale mit dem iOS-Peripheriegerät verbinden, werden die Eigenschaften korrekt übertragen und das Schreiben funktioniert.

Ich habe versucht:

Also - bin ich etwas falsch auf der Android Seite tun? Wenn nicht: Ist das ein Fehler? Oder will iOS nur Schreibvorgänge von iOS-Geräten?

Ich benutze Android 4.4.2 (Glass XE18.11).

+0

können Sie mir bitte vorschlagen, wie Sie Charakter von ios zu Android lesen? – Rajesh

Antwort

2

Es scheint, dass dies einen Fehler in der Android BLE API war. Nach dem letzten Update (Glass XE18.3) ist dieses Verhalten verschwunden und die Übertragung der Eigenschaften funktioniert wie erwartet.

+0

Ich verwende Sony, Motorola Geräte der Versionen 5 und 4.4.4. Aber kein Schreibfehler war Schreibeigenschaften fehlgeschlagen. – Prasad