BLE 连接设备与交换数据问题

最近在进行安卓APP的开发,需要通低功耗蓝牙与设备进行交互,刚刚才可以成功交互数据,在这里记录一些遇到的主要的问题。


之前没有蓝牙开发的经验,所以尝试着用传统蓝牙的方式,用过BluetoothSocket与设备连接,总是报 IOException.

java.io.IOException: read failed, socket might closed or timeout, read ret: -1

低功耗蓝牙与传统蓝牙的连接方式不同,低功耗蓝牙是通过BluetoothGatt,以service和characteristic的方式来交互数据的。


使用Gatt时,想要获取service或者characteristic,都是需要先知道与之对应的Uuid,这个就只能与硬件工程师做好沟通。
在与设备交互时,先要对可接受通知的characteristic a进行setCharacteristicNotification,然后对可写的characteristic b写入数据,设备收到b写入了数据,回调onCharacteristicChanged函数,返回characteristic c给APP,c里包含APP请求的数据。
做好这些事情后,向设备的某一个characteristic写数据时,onCharacteristicWrite函数成功的被回调,但是onCharacteristicChanged函数没有被回掉。这说明虽然成功的在b中写入了数据,但设备并没有调用回调函数。解决办法是在setCharacteristicNotification中订阅这个characteristic的所有descriptor。

for(BluetoothGattDescriptor dp:characteristic.getDescriptors()){
    dp.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
    bluetoothGatt.writeDescriptor(dp);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 初识低功耗蓝牙 Android 4.3(API Level 18)开始引入Bluetooth Low Energy...
    JBD阅读 112,996评论 46 342
  • Guide to BluetoothSecurity原文 本出版物可免费从以下网址获得:https://doi.o...
    公子小水阅读 8,263评论 0 6
  • 背景 蓝牙历史说到蓝牙,就不得不说下蓝牙技术联盟(Bluetooth SIG),它负责蓝牙规范制定和推广的国际组织...
    徐正峰阅读 12,549评论 6 33
  • 小学阶段,我无数次问女儿一个问题。“最近作文题目有需要写妈妈的吗?” 女儿总回答:“没有……我们卷子中,即使命题作...
    繁花坞阅读 858评论 16 16
  • 钟声时而訇鸣,象午后的骄阳 把儿女半生的成长写下来 一一如是艰辛又流畅 时而会邈远,变成空灵 您有怎么样的出世 又...
    诗人金子阅读 521评论 0 0