Android ble蓝牙使用注意
以下均为自己在android ble开发项目中遇到的问题
1.尽量不要在bluetoothgattcallback里面的回调函数中执行读写通知操作,最多一个,因为例如在onservicesdiscovered回调函数中只会传一个写操作,不管里面有多少个,而通知如setcharacteristicnotification(characterist,true)也有写操作,所以如果需要同时执行多步征特操作时,不能在回调函数中执行,不然只会执行第一步特征操作。
2.读写通知都是异步操作,但是一般必须一步一步地执行,只有当一个写特征操作完成并回调后才能执行下一个,不然只会执行最后一个,所以需要在两个写特征操作之间加一个睡眠时间如thread.sleep(500),具体时间自己把握;
3.很多蓝牙设备产家都会弄入自己的编码格式,所以有必要需要阅读对应品牌的通讯协议,因为发送的数据和接收的数据都需要根据产品的通讯协议来解读,可能在读取蓝牙设备的数据时需要先向设备发送命令,让其响应才行,有时还不只需要写一条命令,我遇到的问题是需要写两条不同的命令
4.status为133时并不一定是gatt没有关闭,也有可能是蓝牙适配器没电了,如果软件代码自认为没问题,那就观察一下蓝牙是否正常工作,蓝牙灯是否有在闪,我遇到的是蓝牙灯没闪数据就读不到,然后status变为8并且再连接之后会出现133,只有当有电蓝牙灯亮时133才会消失且正常读取数据。
5.使用characteristic.getvalue()时得到的是一个byte[]数组,可以将其转化为十六进制字符串方便查看协议解码,在写特征操作设置值是应该传入byte[],因为自己认为写入的字符串是十六进制的,其实不是,应该将字符串转为byte[]
6.蓝牙设备一般只能发送20个字节的数据,可能一次接收的数据不是完整的数据,需要将后面的数据连接起来构成一串完整的数据
注:未经允许禁止转载!!!
推荐阅读
-
详解Android使用Html.fromHtml需要注意的地方
-
在 Android 11 上使用第三方 SDK 向其他应用分享文件的注意事项
-
Android中使用LayoutInflater要注意的一些坑
-
Arduino使用蓝牙BLE模块
-
Android Notification的基本使用和点击跳转中的注意事项
-
Android ble蓝牙使用注意
-
Android BLE定位应用(蓝牙搜索方法)
-
Android应用使用UDP通信简单实现及注意事项
-
Android Studio之dependencies使用+号注意事项
-
Android一个小知识点: 多个界面同时使用一个资源布局的时候,修改背景需要注意的坑