iOS 蓝牙开发之(mutipeerConnectivity)
蓝牙
mutipeerConnectivity
iOS7 引入的一个全新框架
替代GameKit框架
多用于文件传输
iOS设备不联网也能给附近的人聊天
搜索和传输的方式
* 双方WIFI和蓝牙都没有打开:无法实现
* 双方都开启蓝牙:通过蓝牙发现和传输
* 双方都开启WIFI:通过WIFI Direct发现和传输,速度接近AirDrop
* 双方同时开启了WIFI和蓝牙:模拟AirDrop,通过低功耗蓝牙技术扫描发现握手,然后通过WIFI Direct传输
示例代码
步骤
.注册一个广播 告诉别人 我的设备是可以被发现的
.扫描蓝牙设备 需要实现代理方法
.使用一个MCSession对象 存储当前的会话 需要实现代理方法
.使用MCSession对象 发送和接收数据
连接设备
创建MCSession对象用于存放当前连接的会话
//初始化会话
MCPeerID *peerId = [[MCPeerID alloc] initWithDisplayName:[UIDevice currentDevice].name];
self.mySession = [[MCSession alloc] initWithPeer:peerId];
开启广播对象,通知正在搜索的设备他们是可用的
//设置可被发现
- (IBAction)fount:(id)sender {
UISwitch *s = (UISwitch *)sender;
if (s.isOn) {
//注册广告
/*
服务类型 可能一个app发送了多个广告 所以需要给广告绑定一个唯一标识
session:当前会话
*/
_assistant = [[MCAdvertiserAssistant alloc]initWithServiceType:SERVICE_TYPE discoveryInfo:nil session:_mySession];
//开启广播
[_assistant start]; }
}
开始搜索蓝牙设备
- (IBAction)lianjieshebei:(id)sender {
//创建搜索蓝牙设备设备控制器
MCBrowserViewController *browser = [[MCBrowserViewController alloc] initWithServiceType:SERVICE_TYPE session:_mySession];
browser.delegate = self;
[self presentViewController:browser animated:YES completion:nil];
}
连接以后选择数据发送
- (IBAction)xuanzewenjian:(id)sender {
UIImagePickerController *imagepicker = [[UIImagePickerController alloc] init];
imagepicker.delegate = self;
imagepicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
[self presentViewController:imagepicker animated:YES completion:nil];
}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info {
self.imageView.image = info[UIImagePickerControllerOriginalImage];
[picker dismissViewControllerAnimated:YES completion:nil];
}
在搜索控制器的连接完成代理方法中隐藏搜索设备控制器
#pragma mark - 扫描设备的代理
//发现设备以后可以通过代理方法来实现传送数据 扫描设备的代理
//链接成功
- (void)browserViewControllerDidFinish:(MCBrowserViewController *)browserViewController{
[browserViewController dismissViewControllerAnimated:YES completion:nil];
}
实现搜索控制器的代理方法,获取连接上的设备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 { // 判断是否有图片
if (!self.showImage.image) return; // 获取图片
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];
}
}
接收数据
#pragma mark MCSessionDelegate
//接收到数据
- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID {
dispatch_async(dispatch_get_main_queue(), ^{
self.imageView.image = [UIImage imageWithData:data];
}); }
//必须实现的
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state { }
iOS 蓝牙开发之(mutipeerConnectivity)的更多相关文章
- iOS蓝牙开发(二)蓝牙相关基础知识
原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ====== ...
- iOS 蓝牙开发资料记录
一.蓝牙基础认识: 1.iOS蓝牙开发: iOS蓝牙开发:蓝牙连接和数据读写 iOS蓝牙后台运行 iOS关于app连接已配对设备的问题(ancs协议的锅) iOS蓝牙空中 ...
- iOS蓝牙开发(4.0)详解
最近由于项目需要, 一直在研究蓝牙4.0,在这儿分享给大家, 望共同进步. 一.关于蓝牙开发的一些重要的理论概念: 1.当前ios中开发蓝牙所运用的系统库是<CoreBluetooth/Core ...
- iOS 蓝牙开发详解
目前iOS智能硬件的开发交互方式主要分为两种,一种是基于低功耗的蓝牙4.0技术(由于耗电低,也称作为BLE(Bluetooth Low Energy))对应iOS的框架为CoreBluetooth,另 ...
- iOS蓝牙开发总结-4
蓝牙开发总结 只要熟悉蓝牙的流程,和蓝牙中每一个角色的作用,其实蓝牙通讯并没有想象中的难 1.蓝牙中心CBCentralManager:一般指得是iPhone手机 2.设备(外设)CBPeripher ...
- iOS蓝牙开发CoreBluetooth快速入门
在iOS开发中,实现蓝牙通信有两种方式,一种是使用传统的GameKit.framework,另一种就是使用在iOS 5中加入的CoreBluetooth.framework. 利用CoreBlueto ...
- ios蓝牙开发(三)ios连接外设的代码实现:手机app去读写蓝牙设备。
手机app去读写蓝牙设备....... 代码下载: 原文博客主提供Github代码连接,地址是:https://github.com/coolnameismy/demo ios连接外设的代码实现流程: ...
- iOS 蓝牙开发(二)iOS 连接外设的代码实现(转)
转载自:http://www.cocoachina.com/ios/20150917/13456.html 原文作者:刘彦玮 上一篇文章介 绍了蓝牙的技术知识,这里我们具体说明一下中心模式的应用场景. ...
- iOS 蓝牙开发(三)app作为外设被连接的实现(转)
转载自:www.cocoachina.com/ios/20151105/14071.html 原作者:刘彦玮 再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用ap ...
- iOS蓝牙开发(一)蓝牙相关基础知识(转)
转载自:http://www.cocoachina.com/ios/20150915/13454.html 原文作者:刘彦玮 蓝牙常见名称和缩写 MFI ======= make for ipad , ...
随机推荐
- Loj #6244. 七选五
link: https://loj.ac/problem/6244 让我们设B=N-K,再设F(P)为从1~P+B中选P个数(有序的),且这P个数是一个错排(即不存在一个i使得 i=Ai ,其中A是选 ...
- 2016北京集训测试赛(十一)Problem C: 树链问题
Solution 智障暴力题, 每个点维护一下子树信息, 树剖就好了. 我居然还傻了写了一发毛毛虫... #include <cstdio> #include <cctype> ...
- gradients的一些注意点
Each variable has a [.grad_fn] attribute that references a Function that has created the Variable(ex ...
- 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源
我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...
- Excel找出两列相同部分
公式:=IF(COUNTIF($B$2:$B$1036,A6)>0,A2,"") 含义:从B列第2行到b列1036行中和A列第6个相等的返回A6的值,不相等返回空 用法:新建 ...
- 安卓Webview缓存网页数据(无网络正常显示)
热度 1已有 52 次阅读2016-8-26 17:53 |个人分类:常见问题|系统分类:移动开发 一.需求经历 最近的项目是一个原生 +webview 显示的 APP,一开始的时候,网站那边要求我们 ...
- Android中的多线程断点续传
Android多线程断点下载的代码流程解析: 运行效果图: 实现流程全解析: Step 1:创建一个用来记录线程下载信息的表 创建数据库表,于是乎我们创建一个数据库的管理器类,继承SQLiteOpen ...
- MySQL GUI Tools 使用简介
转自:http://database.ctocio.com.cn/422/8919922.shtml MySQL GUI Tools是一套图形化桌面应用工具套装,可以用来管理MySQL服务器.该 ...
- cmd 中键入netstat,net等出现不是内部或外部命令,也不是可运行的程序或批处理文件
这是环境变量的问题,查下环境变量中path项是否包含%SystemRoot%\system32;再查下%SystemRoot%\system32有没有netstat.exe这个文件
- iOS 在Xcode中使用OpenSSL库
最近要做一个密码键盘,想内置一些加密算法,所以就想到了添加OpenSSL库,现在mac也自带了OpenSSL库,但是每次都从终端是生成是很麻烦的.网上找了很多文档.博客去介绍如何编译可以在Xcode中 ...