首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android BluetoothGatt writeCharacteristic及其响应

Android BluetoothGatt writeCharacteristic及其响应
EN

Stack Overflow用户
提问于 2015-05-12 20:32:45
回答 3查看 5K关注 0票数 2

从这些文档中,我看到了如何在没有响应的情况下编写这样的文档:

代码语言:javascript
运行
复制
BluetoothGattCharacteristic characteristic = ...
characteristic.setValue(bytes);
mBluetoothGatt.writeCharacteristic(characteristic);

如何使用响应预置写请求操作?

(在iOS中有选择写类型CBCharacteristicWriteWithResponse和CBCharacteristicWriteWithoutResponse的选项)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-05-18 19:11:27

从文件中:

公共无效setWriteType (int writeType) 添加到API级别18中,设置此特性的写入类型。 设置特征的写入类型将决定writeCharacteristic(BluetoothGattCharacteristic)函数如何写入此特性。 参数writeType写入类型以实现此特性。可以是: WRITE_TYPE_DEFAULT、WRITE_TYPE_NO_RESPONSE或WRITE_TYPE_SIGNED之一。

票数 5
EN

Stack Overflow用户

发布于 2015-05-12 20:41:29

  1. 你的特点应该是可写的。

检查该特性是否可写:

代码语言:javascript
运行
复制
(characteristic.getProperties() & (BluetoothGattCharacteristic.PROPERTY_WRITE | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE))) != 0
  1. BluetoothGatt.writeCharacteristic()返回布尔标志,指示写入是否成功(如果成功,则为true)。
  2. 一旦BluetoothGatt.writeCharacteristic成功,将以您指定的值执行具有特征的BluetoothGattCallback.onCharacteristicWrite()回调。
票数 7
EN

Stack Overflow用户

发布于 2015-05-19 08:49:37

是啊,我没提过。但是,请注意,应用不同的写入类型是在以下条件下工作的:您写入值的特性必须是可写的,这是蓝牙设备特有的逻辑。先找出你的特点是什么类型,因为它可能有相同的类型,你需要。一旦它满足了可写的条件,每个WRITE_TYPE都应该为您工作。

通过分析BluetoothGatt的writeCharacteristic()方法,可以清楚地看到:

代码语言:javascript
运行
复制
 public boolean writeCharacteristic(BluetoothGattCharacteristic characteristic) {
    if ((characteristic.getProperties() & BluetoothGattCharacteristic.PROPERTY_WRITE) == 0
        && (characteristic.getProperties() &
            BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE) == 0) return false;

    if (VDBG) Log.d(TAG, "writeCharacteristic() - uuid: " + characteristic.getUuid());
    if (mService == null || mClientIf == 0 || characteristic.getValue() == null) return false;

    BluetoothGattService service = characteristic.getService();
    if (service == null) return false;

    BluetoothDevice device = service.getDevice();
    if (device == null) return false;

    synchronized(mDeviceBusy) {
        if (mDeviceBusy) return false;
        mDeviceBusy = true;
    }

    try {
        mService.writeCharacteristic(mClientIf, device.getAddress(),
            service.getType(), service.getInstanceId(),
            new ParcelUuid(service.getUuid()), characteristic.getInstanceId(),
            new ParcelUuid(characteristic.getUuid()),
            characteristic.getWriteType(), AUTHENTICATION_NONE,
            characteristic.getValue());
    } catch (RemoteException e) {
        Log.e(TAG,"",e);
        mDeviceBusy = false;
        return false;
    }

    return true;
}

我知道这是我的第二个答案,但它为我的第一篇文章提供了详细的说明。希望你能帮上忙。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30200871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档