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:
- Paarung der Geräte
- mit reliable write (but I don't really know what that is anyway)
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).
können Sie mir bitte vorschlagen, wie Sie Charakter von ios zu Android lesen? – Rajesh