蓝牙 GameKit
一.准备工作
1.搭建UI
2.拖线
// 图片
@property (weak, nonatomic) IBOutlet UIImageView *imageView; // 建立连接 - (IBAction)buildConnect:(id)sender{} // 发送数据 - (IBAction)sendData:(id)sender{}
二.连接蓝牙
- 显示可以连接的蓝牙设备列表
- (IBAction)buildConnect:(id)sender {// 创建弹窗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]; }
三.利用蓝牙传输数据
- 点击图片从相册中选择一张显示本机
- 可以修改imaV为Btn,也可以为imaV添加手势
- 1.修改imageView的用户交互
- 2.添加手势到图片上
- 3.拖出手势的响应事件
- 4.完善相册选择图片代码
- 可以修改imaV为Btn,也可以为imaV添加手势
// 手势-点击从相册中选一张照片
- (IBAction)tapImage:(UITapGestureRecognizer *)sender {NSLog(@"%s, line = %d", __FUNCTION__, __LINE__);// 先判断是否有相册 if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { return; } // 创建弹出的控制器 UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; // 设置图片来源为相册 ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; // 设置代理 @interface ViewController () <UINavigationControllerDelegate, UIImagePickerControllerDelegate> ipc.delegate = self; // modal出来 [self presentViewController:ipc animated:YES completion:nil]; } #pragma mark - UINavigationControllerDelegate, UIImagePickerControllerDelegate // 选中某图片后调用 - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info { // 控制器返回 [picker dismissViewControllerAnimated:YES completion:nil]; // 设置图片 self.imageView.image = info[UIImagePickerControllerOriginalImage]; }
- 点击发送数据完成图片显示到另一个蓝牙机器上
- 1.分析需要通过GKSession对象来传递数据,所以在
peerPickerController:didConnectPeer:didConnectPeer:
的方法中保存session会话
- 1.分析需要通过GKSession对象来传递数据,所以在
@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; }
- 发送
// 发送数据
- (IBAction)sendData:(id)sender {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]; } #pragma mark - 蓝牙设备接收到数据时,就会调用 - (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设备之间的链接
- 只能用于同一个应用程序之间的连接
- 最好别利用蓝牙发送比较大的数据
转载于:https://www.cnblogs.com/XieMinQiang/p/5272429.html
蓝牙 GameKit相关推荐
- 浅谈iOS中的蓝牙技术(一) GameKit framework
蓝牙低能耗(BLE)技术是低成本.短距离.可互操作的无线技术,工作在免许可的2.4GHz ISM射频频段. Start GameKit.framework 只能用于iOS设备之间的同个应用内连接,多用 ...
- iOS开发 -GameKit蓝牙开发
蓝牙4.0 蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本:较3.0版本更省电.成本低.3毫秒低延迟.超长有效连接距离.AES-128加密等:通常用在蓝牙耳机.蓝牙音箱等设备上.蓝牙技术联盟( ...
- iOS Bluetooth(蓝牙)
1. 蓝牙发送照片 #import "ViewController.h" #import <GameKit/GameKit.h>@interface ViewContr ...
- 01-iOS蓝牙开发简介
蓝牙开发简介 1.1-iOS蓝牙实现方案 iOS中提供了4个框架用于实现蓝牙连接 1.<GameKit.framework>:用法非常简单 只能用于iOS设备之间的连接,多用于蓝牙对战的游 ...
- iOS蓝牙开发CoreBluetooth快速入门
在iOS开发中,实现蓝牙通信有两种方式,一种是使用传统的GameKit.framework,另一种就是使用在iOS 5中加入的CoreBluetooth.framework. 利用CoreBlueto ...
- iOS开发 蓝牙技术4.0详解
前言 前端时间,同学在做项目过程中遇到关于蓝牙方面的问题,今天我就给大家进行详细的进行讲解下蓝牙在iOS开发中的具体实现.在介绍蓝牙前,大家要搞清楚什么是蓝牙? 什么是蓝牙? 随着蓝牙低功耗技术BLE ...
- (九十三)蓝牙的基本使用
蓝牙在GameKit框架中实现,可以实现文件传递和游戏通信等,蓝牙的缺点是不能得到文件传输的进度,因此不宜传输大文件. 使用蓝牙的一般步骤如下: ①创建蓝牙设备拾取器,类似于图片拾取器,通过代理方法获 ...
- iOS开发拓展篇—蓝牙之mutipeerConnectivity的使用
蓝牙 mutipeerConnectivity 简介 * iOS 7引入的一个全新框架 * 多点连接 * 替代GameKit框架 * 多用于文件的传输 * iOS设备不联网也能跟附近的人聊天 * Fi ...
- iOS网络编程实践--蓝牙对等网络通信实例讲解
基于蓝牙对等网络通信就是使用Game Kit中的GKSession.GKSessionDelegate. GKPeerPickerController和GKPeerPickerControllerDe ...
最新文章
- Linux设定程序为服务运行
- 这款超火的游戏,AI只用4小时,就秀出了人类花1年才能达到的水平
- 抛弃一键恢复。教你用vista一键还原备份多系统。图文教程
- Pentium Pro架构/流水线及其优化 (2) - 指令流水线 存储子系统详解
- mybatis介绍(一)
- day03_01 Python历史、32bit和64bit系统的区别
- 也谈谈古代一两银子相当于今天的价格
- 《高性能MySQL》阅读 -Mysql基本特性
- Java中成员变量和局部变量在内存中的分配
- t6服务器验证密码失败,用友T6软件T6服务无法启动,提示SA密码错误
- ios MultipeerConnectivity蓝牙通讯
- 关于MOS管的详细介绍
- js实现简单的倒计时功能
- 基于MFC的五子棋设计与实现
- 数学建模——BP神经网络学习笔记
- 如何获取本地时间信息,并把getDay()函数获取到的日期改为日一二三四五六
- Linux File System(Linux文件系统)
- 多个ajax按照顺序执行的方法
- 驰骋工作流引擎下载与安装步骤
- 一人改代码搞崩推特,马斯克气疯:全部重写!
热门文章
- Keepalived实现LVS的高可用全解析
- 华为3com交换路由命令详解
- 剑指Offer(Java实现)栈的压入、弹出序列
- 剑指offer(Java实现) 求1+2+3+…+n
- qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...
- linux每一个账号都须具备,Linux 用户管理
- 算法杂货铺——分类算法之决策树(Decision tree)
- 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
- DLL的高级操作技术——Windows核心编程学习手札之二十
- Ribbon 负载均衡调用04——ribbon 负载均衡算法||手写轮询算法(原理+JUC)CAS+自旋锁