小编今天带大家了解手机蓝牙硬件APP公司如何分析蓝牙自动重连机制,文中知识点介绍的非常详细。觉得有帮助的朋友可以跟着小编一起浏览文章的内容,希望能够帮助更多想解决这个问题的朋友找到问题的答案,下面跟着小编一起深入学习“手机蓝牙硬件APP公司如何分析蓝牙自动重连机制”的知识吧。
专注于为中小企业提供网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业广阳免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓手机系统效果也是一致的。那这是怎么实现的呢,本篇文章常州开发手机蓝牙硬件APP公司就来聊一聊安卓系统中蓝牙的自动重连机制。
由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:
监听蓝牙的状态变化->获取关闭蓝牙前连接的设备信息->自动连接。
1、手机蓝牙自动重连机制的主要在进程 com.android.bluetooth 中实现的,路径:
packages\apps\Bluetooth\src\com\android\bluetooth\btservice\PhonePolicy.java
For循环中通过判断设备某一个协议的优先级决定是否发起该协议的连接,只有Priority = BluetoothProfile.PRIORITY_AUTO_CONNECT(1000)的设备才会自动连接。
2、车机蓝牙自动重连机制的主要在进程 com.android.car 中实现的,路径:
packages\services\Car\service\src\com\android\car\BluetoothDeviceConnectionPolicy.java
由于流程相差无几,所以本篇就从车机蓝牙系统的角度来分析下自动重连机制的实现原理,手机端的蓝牙自动重连机制有机会再给大家分析。
车机蓝牙的自动重连主要是在 com.android.car 这个服务进程中实现的,先来整体认识下这个进程吧。从该进程的清单文件中可以知道其始于CarService.java:
从系统的全局变量Settings中读取已连接的设备信息,后面等监听到蓝牙状态打开后,再去重连这些设备对应的各个协议。
该全局变量存储路径:/data/system/users/0/settings_secure.xml
注册监听的蓝牙广播有如下几种类型:
1、BluetoothDevice.ACTION_BOND_STATE_CHANGED—设备配对状态;
2、BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED—媒体音频协议连接状态;
3、BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED—手机音频协议连接状态;
4、BluetoothPan.ACTION_CONNECTION_STATE_CHANGED—共享网络协议连接状态;
5、BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED—电话簿协议连接状态;
6、BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED—短信协议连接状态;
7、BluetoothAdapter.ACTION_STATE_CHANGED—蓝牙开关状态;
8、BluetoothDevice.ACTION_UUID—设备UUID;
CarBluetoothUserService是通过bind服务PerUserCarService后getBluetoothUserService()间接使能起来的。
最后对协议重连是按照如下的协议顺序来依次连接:
1、BluetoothProfile.HEADSET_CLIENT
2、BluetoothProfile.A2DP_SINK
3、BluetoothProfile.PBAP_CLIENT
4、BluetoothProfile.MAP_CLIENT
5、BluetoothProfile.PAN
从整个流程分析下来最为关键的部分就是从Setting中读取数据,并且会在蓝牙关闭或进程退出时将已连接设备的信息保存到Setting中。
实际上重连机制不单单适用于上述这种打开蓝牙后的场景,有时蓝牙设备间由于各种原因而导致链路断开,过了一段时间需要自动重连上蓝牙设备,这种场景在上面的重连机制中就不适用了,那该如何实现呢?
方法那也是有的,还记得我有写过一篇详细讲解了蓝牙ACL链路断开的几种原因,然而不是每种断开都需要自动重连的。比如用户手动断开蓝牙这种情况下还发起自动重连,那就太让人无语了。
所以我们只需要对由于链路超时导致的ACL断开的场景,自动发起重连。这样等两个蓝牙设备再次靠近时,就能自动连接成功。
由于两个蓝牙设备超时断开后,再次靠近的时间是不确定的,如果只发起一次自动重连可能无法成功连接上设备,因此这里的自动重连机制中需要加个循环以保证某一次成功连接。
感谢大家的阅读,以上就是“手机蓝牙硬件APP公司如何分析蓝牙自动重连机制”的全部内容了,学会的朋友赶紧操作起来吧。相信创新互联小编一定会给大家带来更优质的文章。谢谢大家对创新互联网站的支持!