iOS中蓝牙的实现方案

iOS中提供了4个框架用于实现蓝牙链接网络

GameKit.framework(用法简单)session

只能用于iOS设备之间的链接,多用于游戏(好比五子棋对战),从iOS7开始过时框架

 

MultipeerConnectivity.framework性能

只能用于iOS设备之间的链接,从iOS7开始引入,主要用于文件共享(仅限于沙盒的文件)测试

 

ExternalAccessory.framework代理

可用于第三方蓝牙设备交互,可是蓝牙设备必须通过苹果MFi认证(国内较少)调试

 

CoreBluetooth.framework(时下热门)code

可用于第三方蓝牙设备交互,必需要支持蓝牙4.0游戏

硬件至少是4s,系统至少是iOS6ip

蓝牙4.0以低功耗著称,通常也叫BLE(Bluetooth Low Energy)

目前应用比较多的案例:运动手坏、嵌入式设备、智能家居

 

GameKit框架简介

使用GameKit框架,能够在游戏中增长对等链接,又称对端链接或点对点链接,Peer To Peer。

使用GameKit框架中的对等网络链接API,能够在游戏玩家之间创建一个对等网络,并在游戏/应用实例之间交换数据。

GameKit框架可使用蓝牙在玩家之间建立网络,玩家甚至不须要链接到互联网,就能够彼此对战。

经过蓝牙实现对等网络链接

为玩家双方呈现一个GKPeerPickerController,提供了一个标准的用户界面链接两台设备

ViewControoler遵循GKPeerPickerControllerDelegate协议,处理来自GKPeerPickerController(对端选择器)的信息

创建链接后,使用GKSession类能够向对端设备发送数据

在receiveData:fromPeer:inSession:context代理方法中编写代码来处理接收到的数据

蓝牙对等网络演练——发送照片(1)

演练目标:经过蓝牙彼此发送照片

演练步骤:

1.  基于照片选择项目进行扩展,仅从照片库选择照片

2. 添加GameKit框架

3. 建立对等链接

3.1 实例化对端选择器

3.2 设置代理,并遵循协议

3.3 显示对端选择器

4. 链接创建代理方法

peerPickerController:didConnectPeer:toSession:

4.1记录对端链接会话

4.2 设置数据接收处理

4.3 关闭对端选择器

 GameKit的蓝牙开发步骤

显示能够链接的蓝牙设备列表

GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];

ppc.delegate = self;

[ppc show];

 

在代理方法中监控蓝牙的链接

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {

    NSLog(@"链接到设备:%@", peerID);

    // 关闭蓝牙设备显示界面

    [picker dismiss];

    // 设置接收到蓝牙数据后的监听器

    [session setDataReceiveHandler:self withContext:nil];

    // 保存session

    self.session = session;

}

GameKit的蓝牙开发步骤

处理接收到的蓝牙数据

- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context {

 

}

利用GKSession给其余设备发送数据

给指定的链接设备发送数据

- (BOOL)sendData:(NSData *) data toPeers:(NSArray *)peers withDataMode:(GKSendDataMode)mode error:(NSError **)error;

给全部链接的设备发送数据

- (BOOL)sendDataToAllPeers:(NSData *) data withDataMode:(GKSendDataMode)mode error:(NSError **)error;

GameKit的蓝牙开发注意

只能用于iOS设备之间的链接

只能用于同一个应用程序之间的链接

最好别利用蓝牙发送比较大的数据

 

Core Bluetooth

Core Bluetooth测试比较麻烦,正常状况下,得至少有2台真实的蓝牙4.0设备

如何让iOS模拟器也能测试蓝牙4.0程序?

买一个CSR蓝牙4.0 USB适配器,插在Mac上

在终端输入sudo nvram bluetoothHostControllerSwitchBehavior="never"

重启Mac

用Xcode 4.6调试代码,将程序跑在iOS 6.1的模拟器上

(苹果把iOS 7.0模拟器对BLE的支持移除掉了)

 

Core Bluetooth的使用场景

运动手环、智能家居、嵌入式设备等等(金融刷卡器、心电测量器)

Core Bluetooth的基本常识

每一个蓝牙4.0设备都是经过服务(Service)和特征(Characteristic)来展现本身的

一个设备必然包含一个或多个服务,每一个服务下面又包含若干个特征

 

特征是与外界交互的最小单位

好比说,一台蓝牙4.0设备,用特征A来描述本身的出厂信息,用特征B来收发数据

 

服务和特征都是用UUID来惟一标识的,经过UUID就能区别不一样的服务和特征

 

设备里面各个服务(service)和特征(characteristic)的功能,均由蓝牙设备硬件厂商提供,好比哪些是用来交互(读写),哪些可获取模块信息(只读)等

 

Core Bluetooth的开发步骤

 

创建中心设备

 

扫描外设(Discover Peripheral)

 

链接外设(Connect Peripheral)

 

扫描外设中的服务和特征(Discover Services And Characteristics)

 

利用特征与外设作数据交互(Explore And Interact)

 

断开链接(Disconnect)

蓝牙的现状

 

绝大多数智能手机支持蓝牙 4.0(BLE)

 

蓝牙芯片发展迅速,在性能和效率方面都有很大提升,且不断变得更小更便宜

 

iBeacon + 蓝牙,前景一片光明

应用之一:室内导航

Estimote公司为iBeacon提供基站

3个iBeacon基站的预购价格为99美圆(约合人民币610元)

Estimote公司推出的iBeacon基站的最远传输距离为50m,可是他们推荐在10m范围内的使用效果最好

 

一块纽扣电池就能为一个iBeacon基站提供长达 2 年的使用寿命,并且是在设备不断对外发射信号的状况下

相关文章
相关标签/搜索