一.准备工作

  • 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.完善相册选择图片代码
    // 手势-点击从相册中选一张照片
- (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会话
@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相关推荐

  1. 浅谈iOS中的蓝牙技术(一) GameKit framework

    蓝牙低能耗(BLE)技术是低成本.短距离.可互操作的无线技术,工作在免许可的2.4GHz ISM射频频段. Start GameKit.framework 只能用于iOS设备之间的同个应用内连接,多用 ...

  2. iOS开发 -GameKit蓝牙开发

    蓝牙4.0 蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本:较3.0版本更省电.成本低.3毫秒低延迟.超长有效连接距离.AES-128加密等:通常用在蓝牙耳机.蓝牙音箱等设备上.蓝牙技术联盟( ...

  3. iOS Bluetooth(蓝牙)

    1. 蓝牙发送照片 #import "ViewController.h" #import <GameKit/GameKit.h>@interface ViewContr ...

  4. 01-iOS蓝牙开发简介

    蓝牙开发简介 1.1-iOS蓝牙实现方案 iOS中提供了4个框架用于实现蓝牙连接 1.<GameKit.framework>:用法非常简单 只能用于iOS设备之间的连接,多用于蓝牙对战的游 ...

  5. iOS蓝牙开发CoreBluetooth快速入门

    在iOS开发中,实现蓝牙通信有两种方式,一种是使用传统的GameKit.framework,另一种就是使用在iOS 5中加入的CoreBluetooth.framework. 利用CoreBlueto ...

  6. iOS开发 蓝牙技术4.0详解

    前言 前端时间,同学在做项目过程中遇到关于蓝牙方面的问题,今天我就给大家进行详细的进行讲解下蓝牙在iOS开发中的具体实现.在介绍蓝牙前,大家要搞清楚什么是蓝牙? 什么是蓝牙? 随着蓝牙低功耗技术BLE ...

  7. (九十三)蓝牙的基本使用

    蓝牙在GameKit框架中实现,可以实现文件传递和游戏通信等,蓝牙的缺点是不能得到文件传输的进度,因此不宜传输大文件. 使用蓝牙的一般步骤如下: ①创建蓝牙设备拾取器,类似于图片拾取器,通过代理方法获 ...

  8. iOS开发拓展篇—蓝牙之mutipeerConnectivity的使用

    蓝牙 mutipeerConnectivity 简介 * iOS 7引入的一个全新框架 * 多点连接 * 替代GameKit框架 * 多用于文件的传输 * iOS设备不联网也能跟附近的人聊天 * Fi ...

  9. iOS网络编程实践--蓝牙对等网络通信实例讲解

    基于蓝牙对等网络通信就是使用Game Kit中的GKSession.GKSessionDelegate. GKPeerPickerController和GKPeerPickerControllerDe ...

最新文章

  1. Linux设定程序为服务运行
  2. 这款超火的游戏,AI只用4小时,就秀出了人类花1年才能达到的水平
  3. 抛弃一键恢复。教你用vista一键还原备份多系统。图文教程
  4. Pentium Pro架构/流水线及其优化 (2) - 指令流水线 存储子系统详解
  5. mybatis介绍(一)
  6. day03_01 Python历史、32bit和64bit系统的区别
  7. 也谈谈古代一两银子相当于今天的价格
  8. 《高性能MySQL》阅读 -Mysql基本特性
  9. Java中成员变量和局部变量在内存中的分配
  10. t6服务器验证密码失败,用友T6软件T6服务无法启动,提示SA密码错误
  11. ios MultipeerConnectivity蓝牙通讯
  12. 关于MOS管的详细介绍
  13. js实现简单的倒计时功能
  14. 基于MFC的五子棋设计与实现
  15. 数学建模——BP神经网络学习笔记
  16. 如何获取本地时间信息,并把getDay()函数获取到的日期改为日一二三四五六
  17. Linux File System(Linux文件系统)
  18. 多个ajax按照顺序执行的方法
  19. 驰骋工作流引擎下载与安装步骤
  20. 一人改代码搞崩推特,马斯克气疯:全部重写!

热门文章

  1. Keepalived实现LVS的高可用全解析
  2. 华为3com交换路由命令详解
  3. 剑指Offer(Java实现)栈的压入、弹出序列
  4. 剑指offer(Java实现) 求1+2+3+…+n
  5. qq讨论组显示连接服务器异常,QQ讨论组出现大面积故障 腾讯回应:因服务器异常 已紧急修复...
  6. linux每一个账号都须具备,Linux 用户管理
  7. 算法杂货铺——分类算法之决策树(Decision tree)
  8. 从这篇文章可以看出有些错误,由此可以看出,还是看msdn要好的多,这是我的经验
  9. DLL的高级操作技术——Windows核心编程学习手札之二十
  10. Ribbon 负载均衡调用04——ribbon 负载均衡算法||手写轮询算法(原理+JUC)CAS+自旋锁