蓝牙常用框架

GameKit.framework

  • 用法简单
  • 只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期

MultipeerConnectivity.framework

  • 只能用于iOS设备之间的连接,从iOS7开始引入
  • 和GameKit用法基本一样

ExternalAccessory.framework

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

CoreBluetooth.framework

  • 时下使用者较多
  • 可用于第三方蓝牙设备交互,必须要支持蓝牙4.0
  • 硬件至少是4s,系统至少是iOS6
  • 蓝牙4.0以低功耗著称,一般也叫BLE(Bluetooth Low Energy)

代码示例

#pragma mark - 选择照片
- (IBAction)pickImage:(id)sender {
    //判断照片源是否可用
//    UIImagePickerControllerSourceTypePhotoLibrary,  //照片薄
//    UIImagePickerControllerSourceTypeCamera,  //相机
//    UIImagePickerControllerSourceTypeSavedPhotosAlbum  //相册
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) return;
    //创建照片选择控制器
    UIImagePickerController *ipc = [[UIImagePickerController alloc]init];
    //设置代理
    ipc.delegate = self;
    //设置照片源
    ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    //弹出控制器
    [self presentViewController:ipc animated:YES completion:nil];
}

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{
    NSLog(@"info=%@",info);
    self.imageView.image = info[UIImagePickerControllerOriginalImage];
    [picker dismissViewControllerAnimated:YES completion:nil];
}

#pragma mark - 连接设备
- (IBAction)connectDevice:(id)sender {
    //创建连接设备的控制器
    GKPeerPickerController *ppc = [[GKPeerPickerController alloc]init];
    //"Use MCBrowserViewController from the MultipeerConnectivity framework"
    //设置代理(在代理中可以监听是否连接成功)
    ppc.delegate = self;
    //弹出控制器(不是全屏,不能用modal)
    [ppc show];
}

//当建立连接成功时,会调用该方法
//peerID:节点ID,每一个蓝牙设备就是一个节点,都有一个对应的节点ID
//session:会话,建立连接之后相当于两个蓝牙之间建立一个会话,之后可以通过会话相互之间传输数据
-(void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{
    //保留会话
    self.session = session;
    //设置句柄
    [self.session setDataReceiveHandler:self withContext:nil];
    //退出控制器
    [picker dismiss];
}

- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{
    //直接转成image,并且设置到imageview
    self.imageView.image = [UIImage imageWithData:data];
}
#pragma mark - 发送照片
- (IBAction)sendImage:(id)sender {
   //将照片转成NSData
    NSData *imageData = UIImageJPEGRepresentation(self.imageView.image, 1/0);
   //发送照片
//    GKSendDataReliable, //可到达,发送数据保证可以到达。意思是说,如果数据传输过程中断掉,就重新建立连接,重新发送数据
//    GKSendDataUnreliable,  //不可到达。数据只会发送一次,如果中间断掉,就不会再发送
    [self.session sendDataToAllPeers:imageData withDataMode:GKSendDataReliable error:nil];
}

你可能感兴趣的:(笔记)