美文网首页
iOS蓝牙学习之GameKit

iOS蓝牙学习之GameKit

作者: 莫离_焱 | 来源:发表于2016-11-14 10:31 被阅读60次

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

1.使用XIB布局

2.引入框架

#import  <Gamekit/Gamekit.h>

建立会话

@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

    GameKit.framework(用法简单)只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS...

  • 蓝牙开发

    iOS6和iOS6之前,蓝牙是通过GameKit中的GKPeerPickerController 进行蓝牙传输 在...

  • iOS-蓝牙(CoreBlueTooth)

    iOS蓝牙须知 iOS提供了4个框架用于实现蓝牙连接 1.gameKit.framework(用法简单) 只能用于...

  • iOS 蓝牙(GameKit)

    iOS中提供了4个框架用于实现蓝牙连接 GameKit.framework(用法简单)只能用于iOS设备之间的连接...

  • iOS蓝牙总结

    ios中蓝牙的几种实现 ios中提供了4个框架用于实现蓝牙连接GameKit.framework只能用于ios设备...

  • iOS 关于蓝牙通信的4种框架

    iOS中蓝牙的实现方案 iOS中提供了4个框架用于实现蓝牙连接 一、GameKit.framework(用法简单)...

  • iOS中的蓝牙

    iOS中的蓝牙 概述 iOS中提供了4个框架用于实现蓝牙连接 1.GameKit.framework(用法简单)只...

  • 重点 (三十一) : 蓝牙/传感器

    iOS中蓝牙的实现方案 iOS中提供了4个框架用于实现蓝牙连接 GameKit.framework(用法简单) 只...

  • iOS蓝牙开发(CoreBluetooth)

    目前在iOS中蓝牙开发框架主要有以下几种 GameKit.framework:iOS7之前的蓝牙通讯框架,从iOS...

  • iOS 蓝牙实现照片的传递

    ios 蓝牙的实现方案 1 GameKit.framework ( ios 7 已经过期了) 2 Multipee...

网友评论

      本文标题:iOS蓝牙学习之GameKit

      本文链接:https://www.haomeiwen.com/subject/tzkhpttx.html