本文已授权微信公众号《码农修仙儿》独家发布
转载请注明出处,本文出自带你解锁蓝牙skill
作者为fanfan
生活中最常见的诸如蓝牙耳机,蓝牙音箱,智能家居也有很多蓝牙(但对距离和速率有一定的限制)。
蓝牙之所以可以实现上述这些功能,是因为在蓝牙中规定了蓝牙协议,来提供一些接口供开发商使用。
协议是什么??协议是说在通信过程中设备所遵循的一种规则
为了更方便的了解蓝牙是什么,我们就借助蓝牙协议来看一看蓝牙到底能干什么??
首先明确一下,目前市面上的Android机的源码大致跟三方面有关系(只考虑蓝牙profile)
profile\Android版本 | Android2.1 | Android4.4 | Android5.0.0 | Android6.0.0 | Android7.1.1 |
---|---|---|---|---|---|
API | 7(ECLAIR_MR1) | 19(KITKAT) | 21(LOLLIPOP) | 23(M) | 25(N) |
发布时间 | 2010-01 | 2013-10 | 2014-11 | 2015 | 2016 |
OppProfile | ✔ | ✔ | ✔ | ✔ | |
PanProfile | ✔ | ✔ | ✔ | ✔ | |
PbapServerProfile | ✔ | ✔ | ✔ | ✔ | |
PbapClientProfile | ✔ | ||||
A2dpProfile | ✔ | ✔ | ✔ | ✔ | |
A2dpSinkProfile | ✔ | ||||
HeadsetProfile | ✔ | ✔ | ✔ | ✔ | |
HfpClientProfile | ✔ | ||||
HidProfile | ✔ | ✔ | ✔ | ✔ | |
MapProfile | ✔ | ✔ | ✔ | ✔ | |
SapProfile | ✔ | ✔ |
含义 | 作用 | 举例 | ||
---|---|---|---|---|
OppProfile | Object Push Profie | 文件传输协议:用于蓝牙设备间的文件传输 | 手机间的文件传输 | |
PanProfile | Personal Area Networking Profile | 个人局域网协议:(有三个角色NAP,PANU,GN)设备一方开启蓝牙网络共享给其他设备使用 | 手机上的蓝牙共享网络 | |
PbapServerProfile | Phone Book Access Profile(PSE) | 读取联系人协议:作为server,本设备的联系人可共享给其他设备 | 提供联系人列表 | |
PbapClientProfile | Phone Book Access Profile(PCE) | 读取联系人协议:作为client角色,本设备可读取server端的联系人 | 读取联系人列表 | |
A2dpProfile | Advanced Audio Distribution Profile(SRC:Source) | 高级音频分发协议:作为server提供音频源 | 例如可以提供音频源的手机 | |
A2dpSinkProfile | Advanced Audio Distribution Profile(SINK) | 高级音频分发协议:作为client播放接收到的音频 | 车载蓝牙,蓝牙音响 | |
HeadsetProfile | Headset Profile | 耳机协议:提供手机音频 | 连接蓝牙耳机 | |
HfpClientProfile | Hands-Free Profile | 免提设备:播放音频 | 蓝牙耳机 | |
HidProfile | Human Interface Device | 人机接口设备 | 蓝牙鼠标,蓝牙键盘 | |
MapProfile | Message Access Profile | 读取短消息协议 | ||
SapProfile | SIM Access Profile | 读取sim卡协议 |
所以蓝牙设备的发送方和接受方是根据谁发送文件而决定的,设备既可以是发送方和接收方。
实现文件传输需要以下条件
接下来就可以进行文件传输了,至于最终传输结果,还很未知啊。
这就好比相亲,旁人能撮合的能提供的就到这里了(相当于文件传输的前提条件,见以上三条),至于能不能成,还得看双方的意见(接收方是否同意接受和发送方是否停止发送,见下文)。但不管能不能成,所谓是雁过留痕,这事儿已经是经历了总要存在记忆里(发送方是传出历史记录,接收方是传入历史记录),每一条记忆都记录了事情的结果,原因,时间,等各种详细信息。唯一不同的是记忆无法删除,但是机器设备中的记录是在查看后自动清除。
如果向已经和其他设备连接的蓝牙设备发送设备,依旧能够成功,但是接收方的当前连接会被断开,被与Sender的文件传输所取代。
如果已经满足文件传输条件,则准备上传文件
此时只是准备发送文件。
如果Sender此时选择停止。则会出现
文件传输会停止,并提示,用户取消上传。
在Sender的传出历史记录中可以看到所传出的文件列表
点击每个文件可以看到传输详情
receiver可以选择拒绝或者接受。
在传入文件记录中会显示所有通过蓝牙发送过来的文件
话不多说,对于OppProfile的基本情况就是这样了,如果有任何疑问可以扫描右下方二维码或者点击左上方蓝色区域获取到二维码或者是微信搜索公众号:fanfan程序媛,关注我的微信公众号留言吧~~
前提条件:
文章写到这里,不得不提我工作中遇到的一个相关的问题。
有次我们公司的测试发来一个bug,说在蓝牙配对成功后互联网无法共享,
首先配对之后界面如下:其中配置文件中的互联网访问即为PanProfile
于是乎,bug描述就是,蓝牙配对后,点击互联网访问一直选择不成功…
在这里也烦请各位测试大神看一看,互联网访问要想成功是先要开启蓝牙共享网络开关的亲!!!
蓝牙共享网络的开关位于设置–>更多–>网络恭喜与热点–>蓝牙共享网络
可以看到,在配对之后如果想要实现个人局域网,有两个相关开关,一个是蓝牙共享网络开关,一个是互联网访问开关。
不论是哪种情况,至于第一种情况可以参加上述bug,不再赘述。
那么此时开启蓝牙共享网络开关的就是Nap–>即网络接入点,选择互联网访问的是PanU–>使用网络方。而且此时设备只能是单一角色(要么是Nap和PanU),即如果设备A打开了蓝牙共享开关,与之配对的设备B未打开蓝牙共享开关,此时只能在设备B上选择开启互联网访问连接。连接成功后如下
在这种情况下,双方均可以主动断开互联网连接。
举个栗子:
买家和卖家: 商人提供水果(相当于开启了蓝牙网络共享Nap提供网络),等待消费者购买(等待开启互联网连接),只有消费者自己才能决定买或者不买(即是否开启互联网连接),商人是不能强买强卖的(即无法开启互联网连接)。当消费者选择要买之后,此时可能在买卖过程中发生矛盾,商人不想卖了或者消费者不想买了都会结束本次交易(即断开设备间的互联网连接)。道理一致。
此时双方均可以作为Nap,也可以作为PanU。与第一种情况的区别就是在开启互联网连接之前是无法确定设备是处于什么角色的。
此时如果在其中一方开启了互联网连接,那么该方在本次互联网连接过程中作为PanU(使用网络),对方在本次互联网连接过程中充当Nap(提供网络)。当断开后,双方的身份又回到了不能确定的状态。当再次有一方开启互联网连接后,角色才能分配。即每次互联网连接都会重新分配身份。
前段时间回家路上看到有一个共享单车是带后座的,好激动,决定来一波共享单车的风:Twins(这不算侵权吧??算的话请一定告诉我!!)要骑一辆带有后座的共享单车,两人都有骑车载人的能力(即表示蓝牙共享网络开关开启),现在就会有两个角色之分:一个是骑车的一个是坐车的。在她们开始骑车之前是无法确定谁是骑车的谁是坐车的(即在互联网连接之前是无法确定谁作为Nap,谁作为PanU),只有一方比如阿娇选择了坐车之后,即选择享受骑车人带来的福利(即选择打开互联网连接),那么另一方阿Sa就被动的成为了骑车的人,提供车前进的动力(即Nap,网络提供者)。也许在骑了1km后,阿Sa觉得累了,或者是阿娇心疼阿Sa,此时,停止骑车(即断开互联网连接),双方交换角色后继续前进~~
对于PanProfile的第二中角色,暂时还未碰到,列为todo吧,或者有了解的可以普及一下。
累呀~~感觉好玩儿的话就动手点个赞吧,更多精彩技术故事尽在我的微信公众号
我又开完乐了,此公众号为蓝牙技术公众号,欢迎关注,欢迎吐槽