iOS之蓝牙简介和使用(二):MutipeerConnectivity
来源:互联网 发布:jsp管理系统源码 编辑:程序博客网 时间:2024/06/05 04:51
蓝牙
mutipeerConnectivity
简介
* iOS 7引入的一个全新框架
* 多点连接
* 替代GameKit框架
* 多用于文件的传输
* iOS设备不联网也能跟附近的人聊天
* FireChat* See You Around* 以上近场聊天App都是基于mutipeerConnectivity框架
* 搜索和传输的方式
* 双方WIFI和蓝牙都没有打开:无法实现* 双方都开启蓝牙:通过蓝牙发现和传输* 双方都开启WIFI:通过WIFI Direct发现和传输,速度接近AirDrop* 双方同时开启了WIFI和蓝牙:模拟AirDrop,通过低功耗蓝牙技术扫描发现握手,然后通过WIFI Direct传输
案例界面搭建
连接设备
- 创建MCSession对象用于存放当前连接的会话
// 创建MCSession对象// initWithPeer:设备的ID// 用于存放当前的连接的会话self.mc_Session = [ [MCSession alloc]initWithPeer:[[MCPeerID alloc] initWithDisplayName:[UIDevice currentDevice].name]];
- 开启广播对象,通知正在搜索的设备他们是可用的
/** * 只要开启了可被搜索的广播,那么连接蓝牙按钮就不可点 */- (IBAction)foundConnect:(id)sender { UISwitch *switchBtn = (UISwitch *)sender; if (switchBtn.isOn) { // 广播对象,告诉其它的设备他们是可用的 if (self.advertiserAssistant == nil) { // 创建广播对象 // initWithServiceType: 广播类型的标示(因为广播可能比较多,所以最好每个广播绑定一个唯一标示) // session:当前会话 // discoveryInfo: 广播信息 self.advertiserAssistant = [[MCAdvertiserAssistant alloc] initWithServiceType:SERVICE_TYPE discoveryInfo:nil session:self.mc_Session]; } // 开启广播 [self.advertiserAssistant start]; self.connectBT.enabled = NO; }else{ self.connectBT.enabled = YES; }}
- 开始搜索蓝牙设备
- (IBAction)connectBlueTooth { // 创建搜索蓝牙设备控制器 MCBrowserViewController *mbVC = [[MCBrowserViewController alloc]initWithServiceType:SERVICE_TYPE session:self.mc_Session]; // 设置控制器代理 mbVC.delegate = self; // 跳转到搜索控制器 [self presentViewController:mbVC animated:YES completion:nil];}
选择数据
- (IBAction)selectImage { // 1. 创建图片选择器 UIImagePickerController *imgPicker = [[UIImagePickerController alloc]init]; // 2. 判断图片选择器是否可用 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) { // 选择器打开的类型 imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum; // 设置代理 imgPicker.delegate = self; // 打开图片选择器 [self presentViewController:imgPicker animated:YES completion:nil]; }}
- 图片选择器代理中获取数据
// 选择完毕调用- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{// NSLog(@"info == %@",info); // 设置显示图片 self.showImage.image = info[UIImagePickerControllerOriginalImage]; // 隐藏图片显示器 [picker dismissViewControllerAnimated:YES completion:nil];}
- 在搜索控制器的连接完成的代理方法中隐藏搜索控制器
/** * 连接完成 * * @param browserViewController 搜索控制器 */- (void)browserViewControllerDidFinish:(MCBrowserViewController *)browserViewController{ [browserViewController dismissViewControllerAnimated:YES completion:nil]; NSLog(@"%s %d",__func__,__LINE__);}
发送数据
- 实现搜索控制器的代理方法,获取连接上的设备ID
#pragma mark - MCBrowserViewControllerDelegate/** * 连接成功 * * @param browserViewController 搜索控制器 * @param peerID 连接上的设备ID * @param info 连接的信息 * * @return YES : 只发送连接上的用户 */- (BOOL)browserViewController:(MCBrowserViewController *)browserViewController shouldPresentNearbyPeer:(MCPeerID *)peerID withDiscoveryInfo:(nullable NSDictionary<NSString *, NSString *> *)info{ self.peerID = peerID; NSLog(@"info == %@ peer = %@",info, peerID); return YES;}
- 将图片发送给连接上的ID
- (IBAction)sendImage { // 获取图片 UIImage *image = self.showImage.image; // 将图片转换成NSData类型 NSData *data = UIImagePNGRepresentation(image); /** * 发送数据 * toPeers : 发给的设备ID的数组 * withMode: 发送模式,是否是安全模式 */ if (self.peerID != nil) { [self.mc_Session sendData:data toPeers:@[self.peerID] withMode:MCSessionSendDataUnreliable error:nil]; }}
接收数据
- 实现MCSession的代理方法接受数据
- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{ NSLog(@"%s %d",__func__,__LINE__); NSLog(@"data = %@ , peer = %@",data,peerID);}
显示数据
- 在MCSeesion代理方法中设置获取过来的数据
// 接收的数据- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID{ NSLog(@"%s %d",__func__,__LINE__);// NSLog(@"data = %@ , peer = %@",data,peerID); UIImage *image = [[UIImage alloc]initWithData:data]; if(image != nil){ // 设置数据 dispatch_async(dispatch_get_main_queue(), ^{ self.showImage.image = image; }); }}
0 0
- iOS之蓝牙简介和使用(二):MutipeerConnectivity
- iOS之蓝牙简介和使用(一):GameKit
- iOS之蓝牙简介和使用(三):CoreBlueTooth
- iOS之ReactiveCocoa简介和使用(二):MVVM
- <iOS开发>之蓝牙使用
- iOS之Runtime简介和使用
- iOS之ReactiveCocoa简介和使用(一)
- iOS之Apple Watch简介和使用
- iOS之ApplePay简介和使用
- ios-蓝牙简介
- iOS-蓝牙简介及CoreBluetooth.framework的使用
- 01-iOS蓝牙开发简介
- iOS之蓝牙开发—CoreBluetooth详解二
- iOS之蓝牙开发
- iOS之蓝牙
- iOS Mansonry简介和使用
- iOS 蓝牙使用
- iOS 蓝牙使用小结
- oracle 关联查询 查询自身表
- Apache 配置虚拟主机三种方式
- NXP LPC系列学习笔记汇总(持续更新中)
- 阿里面试回来,想和Java程序员谈一谈
- STL容器的遍历插入或删除(迭代器失效问题的统一解决)
- iOS之蓝牙简介和使用(二):MutipeerConnectivity
- Android使用SimpleDateFormat不同手机有时格式化手机不准确
- webuploader 使用心得 -3 后台php代码
- 软件架构入门
- 服务管理框架的尝试
- git的使用(2)
- JSP中表达式的使用
- RabbitMQ-消息广播
- dictionary changed size during iteration