【问题标题】:Android BLE: cannot write a Characteristic (no PROPERTY_WRITE)Android BLE:无法写入特征(无 PROPERTY_WRITE)
【发布时间】:2014-08-08 09:04:50
【问题描述】:

我有一个 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 中心。使用 iOS 中心连接到 iOS 外围设备时,可以正确传输属性并且编写工作。

我试过了:

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

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

【问题讨论】:

  • 你能告诉我你是如何从 ios 到 android 阅读 Characteristic 的吗?

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


【解决方案1】:

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

【讨论】:

  • 我使用的是 Sony、Motorola 5 和 4.4.4 版本的设备。但不是写错误就是写特性失败了。
【解决方案2】:

【讨论】:

  • 据我所知,这个问题的问题是 peripheral 端没有写权限。在我的情况下,peripheral 授予我写入权限,但它们不会显示在 central 端的 Android API 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 2018-02-09
  • 2016-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多