iOS蓝牙学习之GameKit

GameKit.framework(用法简单)只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期。该Demo是从手机相册选取图片,传送到链接的设备,接收图片的设备将图片显示在屏幕,并保存到手机相册。

1.使用XIB布局

iOS蓝牙学习之GameKit_第1张图片

2.引入框架

#import 

建立会话

@property(nonatomic,strong)GKSession *session;

3.建立链接button的方法(会弹出类似于Alert的对话框)

//创建一个附近设备搜索提示框

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

ppc.delegate = self;

[ppc show];

4.GKPeerPickerController将遵守代理协议GKPeerPickerControllerDelegate,该代理方法包含四个代理方法

//最常用的方法

//已经成功连接到某个设备,并且开启了链接会话

- (void)peerPickerController:(GKPeerPickerController *)picker//搜索框

didConnectPeer:(NSString *)peerID//连接的设备

toSession:(GKSession *)session//链接的会话:通过会话可以进行数据传输

{

//首先让弹框消失

[picker dismiss];

//标记会话

self.session = session;

//设置接受数据

//设置完接受者之后,接受数据会触发

[self.session setDataReceiveHandler:self withContext:nil];

}

5.在UIimageview上添加手势,点击调用手机相册,遵循UIImagePickerController的代理UIImagePickerControllerDelegate和UINavigationControllerDelegate方法(提供刷新数据及动画的方法)

//从相册中选择图片

- (IBAction)chooseImaFromLib:(id)sender {

//    判断是否支持相册选择

if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

NSLog(@"没有相册");

return;

}

//创建选择图片的控制器

UIImagePickerController *ipc = [[UIImagePickerController alloc] init];

//设置图片来源

ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

//设置代理

ipc.delegate = self;

//modal出来

[self presentViewController:ipc animated:YES completion:nil];

}

//UIImagePickerController代理方法//选择图片完毕调用的方法

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary*)info{

[picker dismissViewControllerAnimated:YES completion:nil];

//让选择的图片显示,info

self.icon.image = info[UIImagePickerControllerOriginalImage];

}

6.发送数据button方法

- (IBAction)sendData:(id)sender {

//第一步先判断要发送的数据是否存在

if (!self.icon.image) {

return;

}

//发送数据

//    [self.session sendData:UIImagePNGRepresentation(self.icon.image)

//                  toPeers:self.session//通常传入已经连接的设备

//              withDataMode:(GKSendDataUnReliable)

//                    error:<#(NSError *__autoreleasing *)#>]

NSError *error  = nil;

BOOL sendState = [self.session sendDataToAllPeers:UIImagePNGRepresentation(self.icon.image)

withDataMode:(GKSendDataReliable)//可靠的传输方式:慢,不会丢包,知道传完  不可靠的传输方式:快,可能会丢包,传递的信息不一定完整

error:&error];

if (!sendState) {

NSLog(@"send error = %@",error.localizedDescription);

}

}

7.接收数据,显示在屏幕上,并保存至手机相册

-(void)receiveData:(NSData *)data//数据

fromPeer:(NSString *)peer//来自哪个设备

inSession:(GKSession *)session//链接会话

context:(void *)context{

//将数据直接显示在屏幕上

self.icon.image = [UIImage imageWithData:data];

//将数据存入相册

UIImageWriteToSavedPhotosAlbum(self.icon.image, nil, nil, nil);

}

总结:

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

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

建立连接后,使用GKSession类可以向对端设备发送数据

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

github上Demo地址:https://github.com/liuyan-yt/GameKItDemo.git

你可能感兴趣的:(iOS蓝牙学习之GameKit)