使用GameKit实现IOS设备之间的蓝牙通信
该工程是使用苹果官方的GameKit框架来实现蓝牙设别之间的通信,首先当然是要在项目中加入GameKit.framework框架。工程的截图如下:
ViewController.h如下:
//// ViewController.h// GameKitDemo//// Created by Fox on 12-3-14.// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.// #import <UIKit/UIKit.h>#import <GameKit/GKSession.h>#import <GameKit/GKPeerPickerController.h> @interface ViewController : UIViewController<GKSessionDelegate,GKPeerPickerControllerDelegate>{ GKSession *currentSession;//GKSession对象用于表现两个蓝牙设备之间连接的一个会话,你也可以使用它在两个设备之间发送和接收数据。 IBOutlet UITextField *txtMessage; IBOutlet UIButton *connect; IBOutlet UIButton *disconnect; } @property (nonatomic, retain) GKSession *currentSession;@property (nonatomic, retain) UITextField *txtMessage;@property (nonatomic, retain) UIButton *connect;@property (nonatomic, retain) UIButton *disconnect; -(IBAction) btnSend:(id) sender;-(IBAction) btnConnect:(id) sender;-(IBAction) btnDisconnect:(id) sender;-(void)mySendDataToPeers:(NSData *)data; @end
ViewController.m如下:
//// ViewController.m// GameKitDemo//// Created by Fox on 12-3-14.// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.// #import "ViewController.h"#import <GameKit/GKPeerPickerController.h> @implementation ViewController@synthesize currentSession;@synthesize connect;@synthesize disconnect;@synthesize txtMessage; GKPeerPickerController *picker;//GKPeerPickerController类提供了一个标准的UI使的应用程序发现并连接到其它蓝牙设备 - (void)viewDidLoad{ [connect setHidden:NO]; [disconnect setHidden:YES]; [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.} - (void)dealloc { [txtMessage release]; [currentSession release]; [super dealloc]; } /* *建立回话后,开始发送信息*/-(IBAction) btnSend:(id) sender{ NSData* data; NSString *str = [NSString stringWithString:txtMessage.text]; data = [str dataUsingEncoding: NSASCIIStringEncoding]; [self mySendDataToPeers:data];} /* *利用GKPeerPickerController框架搜索附近的蓝牙设备*/-(IBAction) btnConnect:(id) sender{ picker= [[GKPeerPickerController alloc] init]; picker.delegate = self; picker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;//connectionTypesMask用户可以选择的连接类型,包括两种类型:GKPeerPickerConnectionTypeNearby和GKPeerPickerConnectionTypeOnline。对于蓝牙通信,使用GKPeerPickerConnectionTypeNearby常量,GKPeerPickerConnectionTypeOnline常量表示基于互联网的连接。 [connect setHidden:YES]; [disconnect setHidden:NO]; [picker show]; } /* *从一个Apple设备中断开连接*/-(IBAction) btnDisconnect:(id) sender{ [self.currentSession disconnectFromAllPeers]; [self.currentSession release]; currentSession = nil; [connect setHidden:NO]; [disconnect setHidden:YES]; } /* *检测到远程蓝牙设备,用户选择并连接到其中一个蓝牙设备时调用该函数*/- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *) session { self.currentSession = session;//将蓝牙连接的回话session保存为当前的session session.delegate = self; [session setDataReceiveHandler:self withContext:nil]; picker.delegate = nil; [picker dismiss]; [picker autorelease];} /* *点击取消时调用该函数*/ - (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker{ picker.delegate = nil; [picker autorelease]; [connect setHidden:NO]; [disconnect setHidden:YES];} /* *设备连接或断开连接时调用该方法*/- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {switch (state){case GKPeerStateConnected: NSLog(@"connected");break; case GKPeerStateDisconnected: NSLog(@"disconnected"); [self.currentSession release]; currentSession = nil; [connect setHidden:NO]; [disconnect setHidden:YES];break;default:break; }} /* *向连同的一端发送数据*/-(void)mySendDataToPeers:(NSData *) data{if (currentSession) [self.currentSession sendDataToAllPeers:data withDataMode:GKSendDataReliable error:nil];} /* *接受发送过来的数据*/-(void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context { NSString* str; str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data received" message:strdelegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; [alert release];} @end
界面如下:
点击连接后,设备开始搜索附近的IOS蓝牙设备:
双方设备搜索并连接成功后,就可以通过输入框来发送消息了。
GameKit主要用于点对点的通信,常用于游戏中。所以向使用这中方法来实现IOS设备的蓝牙同其他非IOS蓝牙设备之间
的通信是比较困难的。
参考来源:http://www.cnblogs.com/KidReborn/archive/2011/10/17/2215641.html
使用GameKit实现IOS设备之间的蓝牙通信相关推荐
- 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信
目录 (一)前期软件准备和硬件准备 ( 二 ) 实现的思路和操作原理 ( 三) 具体的操作方法 MIT Appinventor 是编程领域较为受欢迎且适用的编程软件 ,因其操作流程和使用方法简单,一直 ...
- ios备份应用数据_如何在iOS设备之间备份和复制数据
ios备份应用数据 Although iTunes usually does a good enough job backing up your data, the backups are encry ...
- 实现Android和PC之间的蓝牙通信
这两天想实现PC和安卓手机的通信,限于水平,知道的方法大概有两种:基于数据包的socket和蓝牙.虽然看起来简单,但调也调了两天多.自己测试了下socket,在室内WIFI环境下时延大概是0.1s.而 ...
- android 手机与单片机之间的蓝牙通信
刚好碰到这蓝牙通信方面的项目,上网也看过其他人在蓝牙这方面写的博客,但大多都不全,给一些初触蓝牙的开发者造成一定的麻烦,自己当初也费了不少劲.所以把自己参考网上的一些资料用Android studio ...
- 计算机音乐系统一般需要三种基本设备,如何共享 iTunes 音乐库计算机、 用户和 iOS 设备之间...
情景 2: 共享之间不同的用户帐户 在这里你有一个 PC 或笔记本电脑需要与那些访问到相同的设备,但谁需要使用单独的登录信息的其他用户共享一个 iTunes 库,这将很有用.第一件事在这里是要退出 i ...
- arduino蓝牙通讯代码_在两块Arduino开发板之间实现蓝牙通信
HC-05蓝牙模块是任何Arduino项目必不可少的蓝牙模块!很容易进行连接以及在Arduino IDE中编写代码.在大多数项目中,我们通常将HC05连接至Arduino,并使用它与其他智能设备(如手 ...
- android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接
我正在使用具有蓝牙适配器的Ubuntu 11.10台式电脑和使用带有蓝牙的Android 2.2的Android平板电脑. (两款设备上的蓝牙版本应为2.0或2.1版本)如何使从台式电脑到Androi ...
- 新的蓝牙应用调试方法 – 使用iOS设备进行调试
任凯 蓝牙技术联盟 10月25日 如果你正在iOS平台上开发蓝牙应用程序,或者为iOS应用程序进行对端设备的嵌入式固件开发,那么本文将告诉你如何使用iOS设备和macOS设备建立调试系统,如何获取iO ...
- 史上首次!苹果谷歌高调合作,打通iOS和安卓,蓝牙匿名追踪新冠接触者,5月上线
大数据文摘出品 作者:曹培信.刘俊寰 苹果和谷歌刚刚宣布联手抗疫! 这还是这两大科技公司史上首次高调合作.两大巨头的合作也意味着,iOS和安卓这对世敌,因为疫情这个共同的敌人,暂时握手言和. 据外媒报 ...
- Qt Creator连接iOS设备
Qt Creator连接iOS设备 连接iOS设备 配置设备 查看设备连接状态 指定支持的iOS版本 在模拟器上测试 管理模拟器 检查当前的Xcode版本 连接iOS设备 您可以使用USB电缆将iOS ...
最新文章
- TensorFlow Frontend前端
- 老王亲述:我的运维心路历程
- UA MATH ECE636 信息论10 Non-adaptive Group Testing
- 网易来聊聊子弹短信的消息漫游技术
- 【剑指offer】_09二叉搜索树的后序遍历序列
- [转载] 字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作
- python template_python的Template使用指南
- windows系统c语言编译环境,在Windows平台搭建C语言开发环境
- (一)数据结构和算法、线性结构
- linux 查看pgsql端口,如何通过Linux脚本检查是否已安装PostgreSQL?
- java读取摄像头视屏流,Java 摄像头视频获取
- 新版抖音二维码生成工具源码+实测可用
- 分治法 --- 大整数的乘法
- 公众号推送长图最佳尺寸_微信公众平台图片尺寸是多少
- android 9指纹认证_Android指纹认证教程
- Windows网络诊断和配置常用命令详解
- cors nginx 怎么解决_NGINX配置跨域CORS支持的正确方式
- python写一个简单的12306抢票
- Ps导航栏的简略讲解(一)
- 亚信安全中标北方网“津云”项目 护航“云+网”全媒体平台
热门文章
- 虚拟机IP更换后 weblogic无法启动 java.net.BindException: 无法指定被请求的地址
- 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)
- SpringMvc源码入门
- 自定义admin组件,Xamin
- canvas里图像拖拽操作
- 找出数组中的最大值和最小值
- NodeMCU实现远程控制LED灯
- 1.1 让CPU占用率曲线听你指挥[cpu manager]
- VS编译时自动引用Debug|Release版本的dll
- IntelliJ IDEA使用技巧(五)——页面乱码和控制台乱码