您的位置:首页 > 移动开发 > IOS开发

iOS 蓝牙通讯

2015-09-25 13:56 435 查看
iOS 蓝牙的相关框架有

1 GameKit.framework

【只能存在于iOS设备之间,既是服务端,又是客户端,多用于游戏】

2 CoreBlueTooth.framework

【必须要支持蓝牙4.0,且iPhone4以上,即至少4s手机。可与第三方设备交互数据,

官方demo是Temperature Sensor 】

3 ExternalAccessory.framework

【可于第三方蓝牙设备交互,但是蓝牙设备必须经过MFI认证,需要有苹果的协议,

官方demo是 EADemo和 BTLE】

4 Multipeer Connectivity.framework

【只能用于iOS设备之间,且iOS7才引入。主要是为了共享文件,但是文件是在sandbox内 ,

官方demo是ios7 sample】

下面我讲逐一进行讲解:

一、GameKit.framework

GameKit主要是完成联网的相关功能,包括蓝牙和Internet两种方式。

使用方法是:选择你的工程,切换到Build Phases 再选择 Link Binary With Libraries 点击加号 添加GameKit.framework库。

在头文件中包含必要的库头文件:#import <GameKit/GameKit.h>

另外需要两个协议: <GKPeerPickerControllerDelegate, GKSessionDelegate>,前者是用来触发网络查找模块的标准控件(窗口),后者是处理链接会话session的。

GKPeerPickerControllerDelegate 一般有三个方法需要实现:

-(GKSession *) peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type;

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

-(void) peerPickerControllerDidCancel:(GKPeerPickerController *)picker;

触发产生网络查找窗口的方法:

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

picker.delegate = self;

picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;

[picker show];

执行时,应该会有如下窗口:





发现设备后,应该时如下的样子:





联接成功后,会有新的session的产生。对于session的引用,主要是这两个方法。

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

-(void) session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state

根据函数名字可以看出来,一个是用来控制收数据的,一个使用来处理联接状态发生变化的。

具体使用方法请参考:http://tech.it168.com/a2010/0114/837/000000837727.shtml

demo:http://code4app.com/ios/CoreBlueTooth蓝牙通信/538852ef933bf01e358b5556

二、CoreBlueTooth.framework

详情请参考:

/article/1586111.html

/article/1586110.html

三、 ExternalAccessory.framework

外部附件框架参考

1. 介绍

定义在:

EAAccessory.h

EAAccessoryManager.h

EASession.h

2. EAAccessory类参考

EAAccessory类为你的程序提供了单一连接的附属硬件的信息。你可以使用这个类中的信息来确定你的程序是否能为给定的附件打开一个会话。当你打开会话后,你还可以为附件对象自定义一个委托来得知附件的状态变化。你的委托必须遵守EAAccessoryDelete协议。

你应该使用附件定义的协议来决定是否连接此附件。此协议与附件能够处理的数据类型有关。你可以使用其他属性来帮助你决定是否连接到这个附件,但是一系列的协议应该是你考虑的主要因素。

附件可以通过30针的底部连接器或是无线蓝牙与设备进行连接。

3.EAAccessoryManager类参考

EAAccessoryManager类和与基于iPhone操作系统的设备相连接的附件一起工作。你用这个类得到你的应用程序可能想连接的一系列附件。你还可以用这个类开始和终止发送附件连接或终止连接的声明。

4. EASession类参考

EASession类用来创建你的应用程序和与之相连的硬件附件的通信通道。创建会话时,你必须实现你想用来和附件通信的协议。初始化这个类的实例后,你用可以使用协议提供的输入输出数据流来与附件相互传输数据。

创建了一个会话对象后,你应当立即找回并设置会话提供的数据流对象。数据流发送事件到与它相关的委托中来告之数据流状态的改变。比如:数据流通知委托,数据正在等待被读取,或用来写数据的空间已经可以使用。

当用给定数据流发送或接收数据时,你负责保证根据特定的协议来格式化此数据。EASess并不知道特定的附件协议也不会在传输前后去格式化数据。

四、 Multipeer Connectivity.framework

详情请参考:

/article/2321334.html

https://developer.apple.com/library/ios/documentation/MultipeerConnectivity/Reference/MultipeerConnectivityFramework/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: