Android 蓝牙总结

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

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......




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值