5

Ho un'applicazione Android (Glass) che funge da BLE centrale e si connette a un BLE periferica (che è un dispositivo iOS tramite Nucleo Bluetooth). Sto cercando di leggere da e scrivere alla periferica.Android BLE: non può scrivere una caratteristica (senza PROPERTY_WRITE)

La lettura funziona correttamente (e anche le notifiche di ricezione funzionano bene).

Tuttavia non sono riuscito a scrivere una caratteristica. Qui è il mio codice:

@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 è sempre false. Ho effettuato il debug e ho scoperto che il motivo sono le proprietà. bgc.getProperties() restituisce sempre 50, indipendentemente dalle proprietà impostate sul lato iOS. 50 è PROPERTY_READ, PROPERTY_NOTIFY e PROPERTY_INDICATE, ma la sua mancanza PROPERTY_WRITE, così BluetoothGatt.writeCharacteristic() esce subito:

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

Mi sembra che le proprietà non vengono trasmessi correttamente dal iOS periferica alla centrale di Android. Quando ci si collega alla periferica iOS con un centro iOS, le proprietà vengono trasmesse correttamente e la scrittura funziona.

ho provato:

Così - sto facendo qualcosa di sbagliato sul lato Android? In caso contrario: si tratta di un bug? O solo iOS vuole ottenere le scritture da dispositivi iOS?

Sto usando Android 4.4.2 (Glass XE18.11).

+0

puoi per favore suggerirmi come leggi Caratteri da ios ad android? – Rajesh

risposta

2

sembra che questo era un bug nell'API BLE Android. Dopo l'ultimo aggiornamento (Glass XE18.3) questo comportamento è scomparso e la trasmissione delle proprietà funziona come previsto.

+0

Utilizzo i dispositivi Sony, Motorola delle versioni 5 e 4.4.4. Ma non scrivere errori è stato errore nelle caratteristiche di scrittura. – Prasad

Problemi correlati