当前位置: 首页 > 知识库问答 >
问题:

读取特性时GATT137异常

盛城
2023-03-14

我使用RxAndroidBle库连接蓝牙设备。我得到GATT137例外,当我读蓝牙设备的特性。为什么我读不出特征?代码片段:

 if (device.connectionState == RxBleConnection.RxBleConnectionState.CONNECTED) {
         rxConnection.readCharacteristic(ConstantsBle.deviceUUIDCharacteristic).subscribe({
             Log.e(TAG, "read characteristic task is success")
         }, {
             it.printStackTrace()
         })
     }

例外详情:

W/System.err:com.polidea.rxandroidble.exceptions.BleGatt特征异常: GATT异常来自MAC地址0C: F3: EE: 2A: ED: 49,状态137,类型BleGatt操作{description='CHARACTERISTIC_READ'}。(在这里查找状态0x89https://android.googlesource.com/platform/external/bluetooth/bluedroid/ /android-5.1.0_r1/stack/include/gatt_api.h)W/System.err:在com.polidea.rxandroidble.internal.connection.RxBleGattCallback.propagate错误IfOccurred(RxBleGattCallback.java:227)W/System.err:在com.polidea.rxandroidble.internal.connection.RxBleGattCallback.access800美元(RxBleGattCallback.java:32)W/System.err:在com.polidea.rxandroidble.internal.connection.RxBleGattCallback$2.on特性阅读(RxBleGattCallback.java:108)在android.bluetooth.BluetoothGatt$1.on特征阅读(BluetoothGatt.java:286)W/System.err:在android.bluetooth.IBluetoothGattCallback$Stub. onTransact(IBluetoothGattCallback. java: 117)W/System. err:在android. os.Binder. exTransact(Binder. java: 565)

共有1个答案

颜嘉誉
2023-03-14

无法读取特征,因为与外围设备的身份验证失败。

状态代码:1370x89hex)在Android源代码中有描述。你甚至在你粘贴的日志中有链接。

这种情况可能有以下几个原因:

  1. 中央无法与外围建立联系
  2. 一方放弃了已经存在的债券(Android中存在已知的漏洞)
  3. 刚刚为当前连接建立了配对。在这种情况下,您可以重试读取,读取应该会成功

请注意,配对和键合在可交换中是两种不同的东西,尽管它们经常互换使用。

配对是一个短期过程,适用于特定的连接,而绑定是与加密密钥的后续交换配对(这些密钥随后可以重新用于下一次配对)。

 类似资料:
  • 我试图在我的应用程序中读取一些蓝牙特性。现在我有一个问题,在我的Gatt服务器特性改变后该怎么办。起初,我试图使用一个线程来重新触发读取特性,一次又一次,就像这样: 但问题是,数据似乎在某一点上被破坏(就像我总是从我的MCU端将相同的数据写入特征)。 允许读取像这样的可读取数据吗?有没有什么建议的方法可以一直读取可读取的数据?还是在我的应用程序端更新? 如果你需要任何额外的代码,请告诉我。

  • 我能够使用以下代码成功加载基于XML的属性文件: 我的财产文件代码 但是,当我运行这个时,我得到以下异常: 引起:org.xml.sax.SAXParseExc0019:元素类型属性的内容必须匹配(注释?,条目*)。在org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseExc0019(未知来源)在org.apache.xerces.ut

  • 问题内容: 我试图呼吁一个非常繁重的过程。平均工作时间估计为9-10分钟。 当我执行该过程时,我为一个巨大的数字设置了超时时间:99999999。 2分钟后,出现以下错误: java.net.SocketTimeoutException:读取超时 我尝试对其进行更多处理,并将超时设置为3000,并且在预期的3秒钟后出现了相同的错误。 您对为什么将其设置为最大120000 有任何想法吗? 问题答案:

  • 我不知道为什么,但dom4j不加载xmlns属性,如: xmlns=”http://webservices.example.com/servicesplatform/command/1.0.0“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" 其他属性通常会加载,但会被忽略。我使用属性迭代器检查所有元素的所有属性。 下面是我如何读取此xml

  • 我试图读取一个特点后,关贸总协定连接和服务发现成功。但接收错误15(0x0f,GATT_INSUFFICIENT_ENCRYPTION),然后137(0x0089)在gatt回调。在此错误之后,gatt立即断开连接。 我的设备是三星S4,4.4.2。

  • 我对Java和OOP都是新手。但是,我使用notify读取一个特征,然后使用read读取回调中的多个特征。 我想知道,为什么在使用readCharacteristic(我的特征)时,只能从单个特征(除了通知的特征)中获取值。蓝牙gatt回调声明如下: 公共布尔值 (BluetoothGattCharacteristic characteristic characteristic)从相关远程设备读取