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

蓝牙在GameKit框架中实现,可以实现文件传递和游戏通信等,蓝牙的缺点是不能得到文件传输的进度,因此不宜传输大文件。

使用蓝牙的一般步骤如下:

①创建蓝牙设备拾取器,类似于图片拾取器,通过代理方法获取拾取到的设备,调用show方法来显示拾取器。

GKPeerPickerController *peerC = [[GKPeerPickerController alloc] init];
peerC.delegate = self;
[peerC show];
要遵循UINavigationControllerDelegate,GKPeerPickerControllerDelegate协议。

②通过代理方法获取拾取到的设备,存储这个会话,然后dismiss拾取器视图,记得要存储会话,注意为了接收数据,应该调用会话的setDataReceiveHandler::方法:

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{_session = session;// 设置谁来处理数据[session setDataReceiveHandler:self withContext:NULL];[picker dismiss];}

接收数据的方法既不是代理,也不是通知,因此必须和帮助文档中写的一样,方法如下:

- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{// data就是接收到的二进制数据}
③要发送蓝牙数据,通过session的sendDataToAllPeers:::实现,其中withDataMode用于选择是可靠传输还是不可靠传输,类似TCP和UDP,下面的代码演示了发送一张图片的过程。

- (IBAction)send:(id)sender {NSData *data = UIImagePNGRepresentation(_imageView.image);NSError *err = nil;// 可靠连接可以保证一定送到,不可靠只负责发送[_session sendDataToAllPeers:data withDataMode:GKSendDataUnreliable error:&err];if (err) {NSLog(@"%@",err);}}

【实例】

下面的例子演示了一个发送图片的例程,有一张图片imageView,三个按钮,分别是连接(connect方法)、选择(choosePic)、发送(send),点击选择从照片图库中选择一张图片,点击连接建立会话,点击发送将图片通过会话发送出去。

//
//  ViewController.m
//  蓝牙基本使用
//
//  Created by 11 on 7/27/15.
//  Copyright (c) 2015 soulghost. All rights reserved.
//#import "ViewController.h"
#import <GameKit/GameKit.h>@interface ViewController () <UIImagePickerControllerDelegate,UINavigationControllerDelegate,GKPeerPickerControllerDelegate>@property (weak, nonatomic) IBOutlet UIImageView *imageView;
@property (weak, nonatomic) GKSession *session;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}- (IBAction)connect:(id)sender {// 创建蓝牙设备选择器View,设置代理并且显示、GKPeerPickerController *peerC = [[GKPeerPickerController alloc] init];peerC.delegate = self;[peerC show];}
- (IBAction)choosePic:(id)sender {if(![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]){NSLog(@"图库不可用");return;}UIImagePickerController *imgPickerC = [[UIImagePickerController alloc] init];imgPickerC.delegate = self;imgPickerC.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;[self presentViewController:imgPickerC animated:YES completion:nil];}
- (IBAction)send:(id)sender {NSData *data = UIImagePNGRepresentation(_imageView.image);NSError *err = nil;// 可靠连接可以保证一定送到,不可靠只负责发送[_session sendDataToAllPeers:data withDataMode:GKSendDataUnreliable error:&err];if (err) {NSLog(@"%@",err);}}- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{//NSLog(@"%@",info);UIImage *image = info[UIImagePickerControllerOriginalImage];_imageView.image = image;[self imagePickerControllerDidCancel:picker];}- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker{[picker dismissViewControllerAnimated:YES completion:nil];
}- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session{_session = session;// 设置谁来处理数据[session setDataReceiveHandler:self withContext:NULL];[picker dismiss];}// 通过看setDataReceiveHandler的帮助得到,只要实现了即可
// 接收到其他设备传来的数据时调用
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context{UIImage *image = [UIImage imageWithData:data];_imageView.image = image;}@end

转载于:https://www.cnblogs.com/aiwz/p/6154102.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/358488.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑常识——host文件修改(屏蔽网站或解开屏蔽)

1. 什么是host文件&#xff1a; Hosts文件主要作用是定义IP地址和主机名的映射关系&#xff0c;是一个映射IP地址和主机名的规定。可以用文本文件打开&#xff01;当用户在浏览器中输入一个需要登录的网址时&#xff0c;系统会首先自动从Hosts文件中寻找对应的IP地址&#xff…

面试提问vue中v-if与v-show的区别以及使用场景

目录 区别 使用场景 总结 区别 1.手段&#xff1a;v-if是通过控制dom节点的存在与否来控制元素的显隐&#xff1b;v-show是通过设置DOM元素的display样式&#xff0c;block为显示&#xff0c;none为隐藏&#xff1b;2.编译过程&#xff1a;v-if切换有一个局部编译/卸载的过程…

清华大学计算机系牛人,高考状元不靠加分靠实力

高考状元不靠加分靠实力来源&#xff1a;京华时报 2010-08-24英才档案 录取院校:清华大学计算机专业 毕业学校&#xff1a;河南省濮阳市油田第一中学 高考分数(理)&#xff1a;678分语文117数学135理综283英语143今年初清华大学举行的有三万余名考生参加的自主招生考试中&#…

Web常见漏洞描述及修复建议

1.SQL注入 漏洞描述 Web程序中对于用户提交的参数未做过滤直接拼接到SQL语句中执行&#xff0c;导致参数中的特殊字符破坏了SQL语句原有逻辑&#xff0c;攻击者可以利用该漏洞执行任意SQL语句&#xff0c;如查询数据、下载数据、写入webshell、执行系统命令以及绕过登录限制等。…

glassfish_具有GlassFish和一致性的高性能JPA –第3部分

glassfish在我的四部分系列的第三部分中&#xff0c;我将说明将Coherence与EclipseLink和GlassFish结合使用的第二种策略。 这就是通过EclipseLink使用Coherence作为二级缓存&#xff08;L2&#xff09;的全部内容。 一般的做法 这种方法将Coherence数据网格应用于依赖于数据库…

应广大粉丝的要求,推荐几本前端书籍

这些书籍平时会直接发送在主页的QQ技术群,有兴趣的可以加一下。 不想去培训机构,不想花大笔钱的学习,那就自学吧!接招

初中学习计算机基础,初中生计算机基础学习心得

导语&#xff1a;为了提高自身的计算机管理业务素质&#xff0c;促进信息技术教学工作的顺利开展&#xff0c;我于2017年3月份在中小学继续教育网上选学了《计算机应用基础》的课程学习。以下是小编为您收集整理提供到的范文&#xff0c;欢迎阅读参考&#xff0c;希望对你有所帮…

java的数据结构

本文转自互联网 1、二叉树&#xff1a;非线性数据结构&#xff0c;常被用于实现二叉查找树和二叉堆 二叉树的第i层至多有2的 i -1次方个结点&#xff1b;深度为k的二叉树至多有2^(k) -1个结点&#xff1b;对任何一棵二叉树T。 满二叉树 完全二叉树 平衡二叉树 2、 二叉树的遍历…

AssertJ的SoftAssertions –我们需要它们吗?

编写好的单元测试的规则之一是&#xff0c;它应该出于某种原因而失败&#xff0c;因此&#xff0c;单元测试应该测试一种逻辑概念。 有时很难在每个测试中拥有一个断言。 为了遵循规则&#xff0c;我们可能在一个测试中每个对象具有多个断言。 但是&#xff0c;在单个测试中存…

早上起来CSDN的PC端主页积分变成了0

没有违法&#xff0c;没有乱纪&#xff0c;这是什么鬼&#xff1f;我刚才百度了一下&#xff0c;很多大牛都有类似的经历&#xff0c;心里舒服多了 平台BUG还是挺多的&#xff0c;说不准哪天就轮到你啦&#xff0c;哈哈&#xff01;&#xff01;

Fofa搜索技巧

Fofa搜索技巧&#xff08;理论加实践的整理&#xff09; 题记 最近在整理以前的知识&#xff0c;不过最近出现职业病了&#xff0c;打开fofa看站点就停不下来。我把常用的fofa查询语句记录下来&#xff0c;方便查阅。钟馗之眼和他有区别也异曲同工。 https://fofa.so/ http://…

魔兽世界阿拉索人数最多服务器,魔兽世界8.3哪个区人多_wow8.3服务器人数统计介绍_3DM网游...

魔兽世界8.3人口最多大区是很多玩家都非常关心的一件事情&#xff0c;很多玩家都想在这个新版本去最多的服务器&#xff0c;很多玩家都想知道服务器人口&#xff0c;来看看魔兽世界8.3哪个区人多&#xff0c;wow8.3服务器人数统计介绍。8.3人口最多大区介绍魔兽世界8.3安苏大区…

如何系统的学习javaScript?赶紧看看吧

当今如果要开发现代网站或web应用(包括互联网创业),都要学会JavaScript。而面对泛滥的JavaScript在线学习资源,却是很难找到一份高效而实用的方法去学习这个“web时代的语言”。有一点需要注意,几年前我们需要知道一个真正的服务器端语言(比如PHP,Rails,Java,Python 或…

Shiro-550反序列化漏洞复现

0x01 漏洞简介Apache Shiro是一款开源安全框架&#xff0c;提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用&#xff0c;同时也能提供健壮的安全性。 Apache Shiro 1.2.4及以前版本中&#xff0c;加密的用户信息序列化后存储在名为remember-me的Cookie中。攻击者可…

css 样式面板,关于 CSS 样式面板

使用“CSS 样式”面板可以跟踪影响当前所选页面元素的 CSS 规则和属性(“当前”模式)&#xff0c;也可以跟踪文档可用的所有规则和属性(“所有”模式)。使用面板顶部的切换按钮可以在两种模式之间切换。使用“CSS 样式”面板还可以在“所有”和“当前”模式下修改 CSS 属性。有…

Fragment 横竖屏切换问题

在默认情况下当发生横竖屏切换时&#xff0c;当前Activity中的fragment都会通过Fragment.instantiate重新生成&#xff0c;该方法将使用默认的构造函数来生成相应的Fragment&#xff0c;所以如果没有默认构造函数的话将会报错&#xff0c;例如&#xff1a;class MyFragment { p…

IIS-ShortName-Scanner使用

000 漏洞简介 Microsoft IIS在实现上存在文件枚举漏洞&#xff0c;攻击者可利用此漏洞枚举网络服务器根目录中的文件。 危害&#xff1a;攻击者可以利用“~”字符猜解或遍历服务器中的文件名&#xff0c;或对IIS服务器中的.Net Framework进行拒绝服务攻击。 001 工具简介 J…

配置java ee_Java EE中的配置管理

配置java ee当我尝试配置管理与云计算有很多相关性时&#xff0c; 争论 较早。 实际上&#xff0c;我大胆地宣称配置管理是任何认真尝试从软件中节省几美元的基石。 那么什么是配置管理及其主要目标&#xff1f; 在不使事情变得过于复杂的情况下&#xff0c;我认为接下来的两个…

我的世界中国版服务器地图文件在哪,我的世界中国版手机版联机的地图保存在哪 | 手游网游页游攻略大全...

发布时间&#xff1a;2017-05-12我的世界战舰设计图 手机版战舰怎么做.那下面给大家分享的是玩家自己在手机版中手撸的一个战舰建筑哦~那感兴趣的玩家不妨进来看看他是怎么建造战舰的哦~希望大家喜欢. 游戏园我的世界官方群:325049520 二群:25607 ...标签&#xff1a;我的世界 …

kali NETCAT NC的使用

文章目录 nc的常用选项NC具有的常用功能telnet / 获取banner信息传输文本信息传输文件/目录加密传文件端口扫描远程克隆硬盘远程控制NCAT TCPDUMP简单用法 nc的常用选项 -l 开启监听模式&#xff0c;用于入站链接 -p 开放本地端口 -n 远程连接&#xff0c;后面要跟上端口 -v …