java - 安卓蓝牙 : cannot write a Characteristic (no PROPERTY_WRITE)

标签 java android bluetooth-lowenergy google-glass core-bluetooth

我有一个 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。我调试了一下,发现是属性的原因。 bgc.getProperties() 始终返回 50,无论在 iOS 端设置了什么属性。 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 Central。当使用 iOS 中心连接到 iOS 外围设备时,属性会正确传输并写入作品。

我试过:

那么 - 我在 Android 方面做错了什么吗?如果不是:这是一个错误吗?还是 iOS 只想从 iOS 设备获取写入?

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

最佳答案

这似乎是 Android BLE API 中的错误。在最新更新 (Glass XE18.3) 之后,此行为消失并且传输属性按预期工作。

关于java - 安卓蓝牙 : cannot write a Characteristic (no PROPERTY_WRITE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24279271/

相关文章:

java - DataSnapshot 同时是满的和空的?

android - 从 Cursor 到 LinearLayout 的动态项目列表,无需使用 ListView

java - Spring Web MVC Tiles 属性 'header' 未找到

java - 如何模拟对象?

java - 为什么我的子类不能访问其父类(super class)的 protected 变量,当它位于不同的包中时?

ubuntu - 无法从ubuntu机器刷入cc2650

java - Bluetooth LE 通过应用程序在 Android 设备之间发送字符串数据

Java 使用 API 或回调在 Firefox 中加载 URL?

php - 没有从 MySQL 检索到 Android ListView 的数据

ios - iOS CoreBluetooth被动检查蓝牙是否已启用,而不提示用户打开蓝牙