之前有个研究任务安排给我:对蓝牙耳机断线通知进行分析研究,后来由于缺少设备测试而终止,但是在前期分析研究中,获益不少,故整理如下:
一、要求:
蓝牙耳机掉线通知研究,看断开能否得到通知,能否识别主动断开,还是距离过远而断开,完成后提交研究报告和相关Demo。
二、分析:
1、关于苹果蓝牙:是鸡肋 功能很有限
2、思路
三、结果:
理论上可实现与外围蓝牙设备进行通信,但缺少硬件设备(MFI)进行测试
四、关于API
目前苹果的蓝牙技术大部分还是封闭的,针对蓝牙技术,提供有如下API,具体分析见下
(Demo参见)
2) GameKit. framework分析结果
(Demo参见)
3) ExternalAccessory. framework分析结果
(Demo参见)
针对苹果蓝牙技术的分析,扩展了范畴,对越狱设备的蓝牙,以及2设备蓝牙连接后断开的情况进行了分析如下
1、越狱情况
由于Apple把蓝牙的使用门槛设置的很高,未越狱的设备仅可通过蓝牙听歌接电话,无法互传文件等。但是越狱后虽然用户权限升为RW,能够利用蓝牙传送文件等,但是往往会出现诸多问题,其中最多的就是搜索不到外设。而且第三方的蓝牙程序可能与自带蓝牙程序发生冲突,导致设备蓝牙无法使用等情况。
2、 设备间(如iPhone/iPod)蓝牙相连断开的情况
利用Apple提供的GameKit. framework完成了2设备蓝牙连接通信的Demo,设备建蓝牙连接后会话处理都是GKSession所提供,具体分析如下:
• 当蓝牙状态变化会调用
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
其中:
typedef enum { GKPeerStateAvailable, // not connected to session, but available for connectToPeer:withTimeout: GKPeerStateUnavailable, // no longer available GKPeerStateConnected, // connected to the session GKPeerStateDisconnected, // disconnected from the session GKPeerStateConnecting, // waiting for accept, or deny response } GKPeerConnectionState;
故蓝牙的状态有:可用,不可用,已连接,已断开,正在连接。同时GKSession还提供收到另一个peer,连接错误或者失败的方法。