簡體   English   中英

Android BLE:無法寫一個特征(沒有PROPERTY_WRITE)

[英]Android BLE: cannot write a Characteristic (no PROPERTY_WRITE)

我有一個Android(Glass)應用程序,它充當BLE中心並連接到BLE外圍設備 (使用Core Bluetooth的iOS設備)。 我正在嘗試讀取寫入外設。

閱讀工作正常(接收通知也很好)。

但是我沒有設法寫出一個特征。 這是我的代碼:

@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總是false 我調試了它,發現原因是屬性。 無論在iOS端設置了什么屬性, bgc.getProperties()始終返回50 50PROPERTY_READPROPERTY_NOTIFYPROPERTY_INDICATE ,但缺少PROPERTY_WRITE ,因此BluetoothGatt.writeCharacteristic()立即退出:

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

在我看來,屬性不能從iOS外設正確傳輸到Android中心。 使用iOS中央連接到iOS外圍設備時,屬性會正確傳輸並且可以正常寫入。

我試過了:

所以 - 我在Android方面做錯了嗎? 如果不是:這是一個錯誤嗎? 或者iOS是否只想從iOS設備獲取寫入?

我使用的是Android 4.4.2(Glass XE18.11)。

似乎這是Android BLE API中的一個錯誤。 在最新更新(Glass XE18.3)之后,此行為消失,並且傳輸屬性按預期工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM