Android BLE readCharacteristic失败

凯西

连接到BLE设备时,我正在尝试读取其初始状态。这是我必须尝试执行的代码:

@Override
public void onServicesDiscovered(BluetoothGatt gatt, int status)
{
    if(status == BluetoothGatt.GATT_SUCCESS)
    {
        Log.i(TAG, gatt.getDevice().toString() + "Discovered Service Status: " + gattStatusToString(status));
        for(BluetoothGattService service : gatt.getServices())
        {
            Log.i(TAG, "Discovered Service: " + service.getUuid().toString() + " with " + "characteristics:");
            for(BluetoothGattCharacteristic characteristic : service.getCharacteristics())
            {
                // Set notifiable
                if(!gatt.setCharacteristicNotification(characteristic, true))
                {
                    Log.e(TAG, "Failed to set notification for: " + characteristic.toString());
                }

                // Enable notification descriptor
                BluetoothGattDescriptor descriptor = characteristic.getDescriptor(CCC_UUID);
                if(descriptor != null)
                {
                    descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
                    gatt.writeDescriptor(descriptor);
                }

                // Read characteristic
                if(!gatt.readCharacteristic(characteristic))
                {
                    Log.e(TAG, "Failed to read characteristic: " + characteristic.toString());
                }
            }
        }
    }
    else
    {
        Log.d(TAG, "Discover Services status: " + gattStatusToString(status));
    }
}

但是每次读取都会失败!稍后,如果我基于UI交互启动读取,则读取就很好!关于这里发生的事情有什么想法吗?

罗伯·高曼

在Android BLE实现中,需要对gatt操作调用进行排队,以便一次仅执行一个操作(读,写等)。因此,例如,在gatt.readCharacteristic(characteristicX)调用之后,您需要等待gatt回调BluetoothGattCallback.onCharacteristicRead()以指示读取已完成。如果您在上一个操作完成之前启动了第二个gatt.readCharacteristic()操作,则第二个操作将失败(返回false)。这适用于所有gatt.XXX()操作。

它的工作量很小,但是我认为最好的解决方案是为所有gatt操作创建一个命令队列,并一次运行一次。您可以使用命令模式来完成此操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Android:捕获BLE连接失败/断开连接?

来自分类Dev

注册 gatt 堆栈失败错误 BLE android 三星

来自分类Dev

Android BLE 广告失败,错误代码为 1

来自分类Dev

蓝牙BLE readCharacteristic有一些错误

来自分类Dev

如何管理多个 BLE writeCharacteristic 和 readCharacteristic 调用?

来自分类Dev

Android BLE:“扫描失败,原因是应用程序注册UUID失败”

来自分类Dev

Android BLE,读写特性

来自分类Dev

Android BLE信标扫描

来自分类Dev

Android BLE被动扫描

来自分类Dev

Android BLE发送数据

来自分类Dev

Android Ble延迟通知

来自分类Dev

Android Ble MTU大小

来自分类Dev

Android BLE,读写特性

来自分类Dev

Android BLE写入响应

来自分类Dev

Ble Android 广告:AddServiceData

来自分类Dev

快速连续写入多个字节时,Android 到 BLE 写入失败

来自分类Dev

BLE 设备写入特性失败

来自分类Dev

BLE设备会自动与Android设备断开连接。Android BLE

来自分类Dev

订阅BLE Gatt通知Android

来自分类Dev

Android BLE重新连接问题

来自分类Dev

未调用Android BLE onCharacteristicChanged

来自分类Dev

BLE GATT上传数据-Android

来自分类Dev

发送Android BLE GATT通知

来自分类Dev

Android:同时BLE连接的限制

来自分类Dev

Android BLE 发现问题

来自分类Dev

是否可以将启用BLE的Android / iPhone用作BLE信标?

来自分类Dev

Ionic BLE Android Ble正在检索与IOS Ble不同的外围设备的MAC地址

来自分类Dev

Android:BLE如何读取多个特征?

来自分类Dev

在Android BLE中未调用onBatchScanResults