当前位置:   article > 正文

Android 蓝牙总结_android ble 不支持30秒内 搜索5次?

android ble 不支持30秒内 搜索5次?

手上的蓝牙项目收尾了,这里做一下总结。

BLE 部分

1. Android 5.0 及以上可以请求MTU,有的手机请大了会失败,onMtuChange 回调方法中 会给出请到的MTU值。

2.Android 7.0 及以上 底层对搜索做了限制,30秒内最多搜索5次,频繁搜索底层不响应并报Error Log。

3.Android 6.0及以上 蓝牙搜索需要定位权限。

4.Android 8.0 开始 blueDroid开始支持蓝牙5.0,可以更新2M带宽,感觉连接速度变慢了。

5.Android 5.0 开始BLE搜索部分给出了新的API ,新API 对广播包做了解析,可以直接通过API 来拿广播中的字段值
  5.0以下需要自己手撸解析。

6.API中有很多对象锁,有的操作需要异步调用。

7.连接和断开的动作需要放在主线程中执行,断开后 newState == BluetoothProfile.STATE_DISCONNECT  再执行close()释放资源,不然下次连接会耗时很久,当资源耗尽会连接不上。遇到 133 257 等协议栈报的错误close 重连即可。
8.数传部分,发送数据时 api 如果返回false 代表数据没有进入底层的缓存,需要重发. 如果要达到最高的速度需要每包数据的字节数为(MTU-3),这里可以用一个二级缓存来处理,使用生产者-消费者设计模式,使数传速度达到最大.
9.之前OTA升级速度慢,且不稳定,容易重传。发送数据后使线程wait(1000) 并在收到响应后notify 替换掉之前的sleep。

SPP 部分
1. SPP 部分的搜索使用的是老的API ,bluetoothAdapter.startDiscovery()。通过这个搜索到的设备既有BLE又有经典蓝牙,
需要加一个设备类型过滤,只拿 经典蓝牙或者双模蓝牙
2. SPP 连接前一定要执行一次停止搜索,无论有没有执行过开始搜索。可以在连接的地方加一个重连机制,增加连接的成功率
3. SPP 断开连接后acl disconnect 这个广播耗时很不稳定,这里需要特殊处理,不能通过这个来判断连接是否断开
4. SPP 的连接耗时取决于acl链路建立时间。

android 的蓝牙问题还是挺多的,尤其是BLE 的兼容性。下一份源码 根据日志去底层找找。看看蓝牙模块那边的日志,nordic 会在连接成功后定时执行5次请求MTU的操作,这时候如果在发送数据会出问题。不同的芯片厂家可能会有不同的操作。


一个android 蓝牙apk 了解以下?

York......




声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/192237
推荐阅读
相关标签
  

闽ICP备14008679号