当前位置: 首页 > news >正文

做类似淘宝网站怎么做的/网络营销外包网络推广

做类似淘宝网站怎么做的,网络营销外包网络推广,天津靠谱点的装修公司,wordpress开发+文档下载蓝牙自动重连机制的原理分析在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。那这是怎么实现的呢…

蓝牙自动重连机制的原理分析

cacec63a-7313-eb11-8da9-e4434bdf6706.png

在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。那这是怎么实现的呢,本篇文章我们就来聊一聊安卓系统中蓝牙的自动重连机制。

由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:

监听蓝牙的状态变化->获取关闭蓝牙前连接的设备信息->自动连接

1、手机蓝牙自动重连机制的主要在进程com.android.bluetooth中实现的,路径:

packagesappsBluetoothsrccomandroidbluetoothbtservicePhonePolicy.java

cfcec63a-7313-eb11-8da9-e4434bdf6706.png

For循环中通过判断设备某一个协议的优先级决定是否发起该协议的连接,只有Priority = BluetoothProfile.PRIORITY_AUTO_CONNECT(1000)的设备才会自动连接。

2、车机蓝牙自动重连机制的主要在进程com.android.car中实现的,路径:

packagesservicesCarservicesrccomandroidcarBluetoothDeviceConnectionPolicy.java

d2cec63a-7313-eb11-8da9-e4434bdf6706.png

由于流程相差无几,所以本篇就从车机蓝牙系统的角度来分析下自动重连机制的实现原理,手机端的蓝牙自动重连机制有机会再给大家扒(先挖个坑,待以后慢慢填…)。

车机蓝牙的自动重连主要是在com.android.car这个服务进程中实现的,先来整体认识下这个进程吧。从该进程的清单文件中可以知道其始于CarService.java:

d6cec63a-7313-eb11-8da9-e4434bdf6706.png

从系统的全局变量Settings中读取已连接的设备信息,后面等监听到蓝牙状态打开后,再去重连这些设备对应的各个协议。

该全局变量存储路径:/data/system/users/0/settings_secure.xml

注册监听的蓝牙广播有如下几种类型:

  • BluetoothDevice.ACTION_BOND_STATE_CHANGED—设备配对状态
  • BluetoothA2dpSink.ACTION_CONNECTION_STATE_CHANGED—媒体音频协议连接状态
  • BluetoothHeadsetClient.ACTION_CONNECTION_STATE_CHANGED—手机音频协议连接状态
  • BluetoothPan.ACTION_CONNECTION_STATE_CHANGED—共享网络协议连接状态
  • BluetoothPbapClient.ACTION_CONNECTION_STATE_CHANGED—电话簿协议连接状态
  • BluetoothMapClient.ACTION_CONNECTION_STATE_CHANGED—短信协议连接状态
  • BluetoothAdapter.ACTION_STATE_CHANGED—蓝牙开关状态
  • BluetoothDevice.ACTION_UUID—设备UUID
d9cec63a-7313-eb11-8da9-e4434bdf6706.png

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断开的场景,自动发起重连。这样等两个蓝牙设备再次靠近时,就能自动连接成功。

具体实现方案可以参考《蓝牙链路断开的原因》中将ACL链路断开的原因获取到,然后判断原因是链路超时,则发起重连。

dfcec63a-7313-eb11-8da9-e4434bdf6706.png

由于两个蓝牙设备超时断开后,再次靠近的时间是不确定的,如果只发起一次自动重连可能无法成功连接上设备,因此这里的自动重连机制中需要加个循环以保证某一次成功连接。

蓝牙重连机制就简单分析到这儿,感兴趣的小伙伴欢迎私信留言一起讨论。

http://www.jmfq.cn/news/5184415.html

相关文章:

  • 手机网站建站cms/网络营销网
  • 徐州品牌网站建设|徐州网站优化|徐州网络公司-徐州启思信息科技/谷歌seo是什么意思
  • 企业自己做网站/推广途径有哪些
  • 泰安网站建设最好/app推广30元一单平台
  • 做网站智能工具/软文推广渠道
  • 网站在线制作系统/湖南手机版建站系统开发
  • icp备案单位网站/seo最新
  • 网站空间稳定性/怎么做公众号
  • php做的网站安全吗/网络营销的方式包括
  • 网站建站视频教程/互联网推广方式
  • wordpress 设置显示中文字体/seo综合查询工具有什么功能
  • 网站安全如何做/竞价系统
  • 辽宁建设厅官网/山西seo顾问
  • 荆门网站建设公司/厦门seo收费
  • 大型网站只做要多少钱/北京疫情最新消息
  • seo网站三要素怎么做/谷歌浏览器安卓版
  • 法拍重庆网站/网络舆情分析报告模板
  • 金华网站如何制作/网页设计主题参考
  • 网站建设结构安排论文/aso具体优化
  • 四川手机网站制作/优化大师软件大全
  • 设计网站公司好评y湖南岚鸿ok/总推荐榜总点击榜总排行榜
  • 外贸做的社交网站/外贸网站seo
  • 做黑彩网站能赚钱吗/佛山seo培训
  • 做网站还是app省钱/上海好的seo公司
  • 可以做软件的网站有哪些内容/营销宣传图片
  • 做的网站百度上可以搜到吗/安徽网络推广
  • 虚拟网站免费注册/谷歌搜索排名规则
  • 360网站怎么做链接/seo优化上海牛巨微
  • 人人做免费网站/百度云网盘网页版登录
  • 网站建设在家兼职做/安徽网络seo