GameKit用法

一.连接蓝牙

  • 显示可以连接的蓝牙设备列表

 // 创建弹窗
 GKPeerPickerController *ppc = [[GKPeerPickerController alloc] init];

 // 设置代理 @interface ViewController () <GKPeerPickerControllerDelegate>

 ppc.delegate = self;

 // 展示
 [ppc show];
  • 监听蓝牙的连接

#pragma mark -GKPeerPickerControllerDelegate

// 连接成功就会调用
- (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
              didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
                   toSession:(GKSession *)session // 连接会话(通过它进行数据交互){

       NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);

      // 弹窗消失
       [picker dismiss];
}

二.利用蓝牙传输数据

  • 发送图片数据显示到另一个蓝牙机器上

    • 分析需要通过GKSession对象来传递数据,所以在peerPickerController:didConnectPeer:didConnectPeer:的方法中保存session会话

/**< 蓝牙连接会话 */

@property (nonatomic, strong) GKSession *session;

// 连接成功就会调用
- (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
              didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
                   toSession:(GKSession *)session // 连接会话(通过它进行数据交互) {

   NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);

   // 弹窗消失
   [picker dismiss];

   // 保存会话
   self.session = session;
}
  • 发送

 // 发送数据
 if (self.imageView.image == nil) return; // 有图片才继续执行

 // 通过蓝牙链接会话发送数据到所有设备
 [self.session sendDataToAllPeers:UIImagePNGRepresentation(self.imageView.image) // 数据
                     withDataMode:GKSendDataReliable // 枚举:发完为止
                            error:nil];
  • 接收

// 连接成功就会调用
- (void)peerPickerController:(GKPeerPickerController *)picker // 弹窗
 didConnectPeer:(NSString *)peerID // 连接到的蓝牙设备号
 toSession:(GKSession *)session // 连接会话(通过它进行数据交互){

     NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);

     // 弹窗消失
     [picker dismiss];

    // 保存会话
    self.session = session;

    // 处理接收到的数据[蓝牙设备接收到数据时,就会调用
    [self receiveData:fromPeer:inSession:context:]];

    // 设置数据接受者为:self
    [self.session setDataReceiveHandler:self withContext:nil];
 }

// 蓝牙设备接收到数据时,就会调用
- (void)receiveData:(NSData *)data // 数据
           fromPeer:(NSString *)peer // 来自哪个设备
          inSession:(GKSession *)session // 连接会话
            context:(void *)context {

     NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);

    // 显示
    self.imageView.image = [UIImage imageWithData:data];

   // 写入相册
   UIImageWriteToSavedPhotosAlbum(self.imageView.image, nil, nil, nil);
}

四.注意

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

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

  • 最好不去用蓝牙发送比较大的数据

results matching ""

    No results matching ""