蓝牙通信,通过蓝牙传照片
蓝牙通信,通过蓝牙传照片
MrBryant24 发表于4年前
蓝牙通信,通过蓝牙传照片
  • 发表于 4年前
  • 阅读 218
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 蓝牙通信,通过蓝牙传照片 1.我用我的iphone 2.我用我的模拟器 3.这就搞定了!

#蓝牙通信


<b>

  • GameKit(P2P)
  • ShowHand玩游戏

#实现

连接对端

	-(void)connectPeer
	{
	// 1. 实例化一个对端选择视图控制器
	GKPeerPickerController *picker = [[GKPeerPickerController alloc]init];

	// 2. 设置代理
	[picker setDelegate:self];

	// 3. 显示视图控制器
	[picker show];
	}

###对端选择器代理方法 ###完成对端连接

	- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session
	{
	NSLog(@"连接已经建立");
	// session回话,一个完整的连接过程
	_gkSession = session;

	// 设置数据处理对象,类似于delegate
	[_gkSession setDataReceiveHandler:self withContext:nil];
	// 关闭选择器
		[picker dismiss];
	}	

发送照片

	- (void)sendPhoto
	{ // 利用session发送数据
	
	NSData *imageData = UIImagePNGRepresentation(_imageButton.imageView.image);
	
	[_gkSession sendDataToAllPeers:imageData withDataMode:GKSendDataReliable error:nil];

	}

> 如果精通TCP协议、UDP协议

  1. 要发送的数据(二进制的)

  2. 数据发送模式

    • GKSendDataReliable :确保数据发送成功(TCP协议,对网络压力大)
    • GKSendDataUnReliable :只管发送不管成功(UDP协议,对数据完整性要求不高,对网络压力下)

###接受照片

  • 数据接受处理方法,此方法需要从文档中粘贴出来,此智能提示没有

    - (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context
    { NSLog(@"数据接收");
    // 将NSData转换成UIImage,之所以能转换成UIImage是因为我们发送的就是UIImage
    UIImage *image = [UIImage imageWithData:data];
    
    //然后可以得到image对象
    //接着可以去存储或者显示在ImageView
    }
    

> 简单回顾

##图片选择器

  • 选择照片

<pre>

  • (void)selectPhoto { // 1. 首先判断照片源是否可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) {

      // 0)实例化控制器
      UIImagePickerController *picker = [[UIImagePickerController alloc]init];
      // 1)设置照片源
      [picker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    
      // 2) 设置允许修改
      [picker setAllowsEditing:YES];
      // 3) 设置代理
      [picker setDelegate:self];
      // 4) 显示控制器
      [self presentViewController:picker animated:YES completion:nil];
    

    } else { NSLog(@"照片源不可用"); }

} </pre>

###ImagePicker代理方法 <pre>

  • (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { UIImage *image = info[@"UIImagePickerControllerEditedImage"]; [_imageButton setImage:image forState:UIControlStateNormal];

    // 关闭照片选择器 [self dismissViewControllerAnimated:YES completion:nil];

    // 需要将照片保存至应用程序沙箱,由于涉及到数据存储,同时与界面无关 // 可以使用多线程来保存图像 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

      // 保存图像
      // 1. 去图像路径
      NSArray *docs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
      NSString *imagePath = [docs[0] stringByAppendingPathComponent:@"abc.png"];
    
      // 2. 转换成NSData保存
      NSData *imageData = UIImagePNGRepresentation(image);
      [imageData writeToFile:imagePath atomically:YES];
    

    }); } </pre>

标签: 蓝牙
共有 人打赏支持
粉丝 2
博文 6
码字总数 3289
×
MrBryant24
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: