该工程是使用苹果官方的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设备之间的蓝牙通信相关推荐

  1. 手机APP开发之MIT Appinventor详细实战教程(一),利用通过蓝牙控制单片机,以及实现单片机与android设备之间的串口通信

    目录 (一)前期软件准备和硬件准备 ( 二 ) 实现的思路和操作原理 ( 三) 具体的操作方法 MIT Appinventor 是编程领域较为受欢迎且适用的编程软件 ,因其操作流程和使用方法简单,一直 ...

  2. ios备份应用数据_如何在iOS设备之间备份和复制数据

    ios备份应用数据 Although iTunes usually does a good enough job backing up your data, the backups are encry ...

  3. 实现Android和PC之间的蓝牙通信

    这两天想实现PC和安卓手机的通信,限于水平,知道的方法大概有两种:基于数据包的socket和蓝牙.虽然看起来简单,但调也调了两天多.自己测试了下socket,在室内WIFI环境下时延大概是0.1s.而 ...

  4. android 手机与单片机之间的蓝牙通信

    刚好碰到这蓝牙通信方面的项目,上网也看过其他人在蓝牙这方面写的博客,但大多都不全,给一些初触蓝牙的开发者造成一定的麻烦,自己当初也费了不少劲.所以把自己参考网上的一些资料用Android studio ...

  5. 计算机音乐系统一般需要三种基本设备,如何共享 iTunes 音乐库计算机、 用户和 iOS 设备之间...

    情景 2: 共享之间不同的用户帐户 在这里你有一个 PC 或笔记本电脑需要与那些访问到相同的设备,但谁需要使用单独的登录信息的其他用户共享一个 iTunes 库,这将很有用.第一件事在这里是要退出 i ...

  6. arduino蓝牙通讯代码_在两块Arduino开发板之间实现蓝牙通信

    HC-05蓝牙模块是任何Arduino项目必不可少的蓝牙模块!很容易进行连接以及在Arduino IDE中编写代码.在大多数项目中,我们通常将HC05连接至Arduino,并使用它与其他智能设备(如手 ...

  7. android 蓝牙链接电脑,如何使从台式电脑到Android设备的测试蓝牙连接

    我正在使用具有蓝牙适配器的Ubuntu 11.10台式电脑和使用带有蓝牙的Android 2.2的Android平板电脑. (两款设备上的蓝牙版本应为2.0或2.1版本)如何使从台式电脑到Androi ...

  8. 新的蓝牙应用调试方法 – 使用iOS设备进行调试

    任凯 蓝牙技术联盟 10月25日 如果你正在iOS平台上开发蓝牙应用程序,或者为iOS应用程序进行对端设备的嵌入式固件开发,那么本文将告诉你如何使用iOS设备和macOS设备建立调试系统,如何获取iO ...

  9. 史上首次!苹果谷歌高调合作,打通iOS和安卓,蓝牙匿名追踪新冠接触者,5月上线

    大数据文摘出品 作者:曹培信.刘俊寰 苹果和谷歌刚刚宣布联手抗疫! 这还是这两大科技公司史上首次高调合作.两大巨头的合作也意味着,iOS和安卓这对世敌,因为疫情这个共同的敌人,暂时握手言和. 据外媒报 ...

  10. Qt Creator连接iOS设备

    Qt Creator连接iOS设备 连接iOS设备 配置设备 查看设备连接状态 指定支持的iOS版本 在模拟器上测试 管理模拟器 检查当前的Xcode版本 连接iOS设备 您可以使用USB电缆将iOS ...

最新文章

  1. TensorFlow Frontend前端
  2. 老王亲述:我的运维心路历程
  3. UA MATH ECE636 信息论10 Non-adaptive Group Testing
  4. 网易来聊聊子弹短信的消息漫游技术
  5. 【剑指offer】_09二叉搜索树的后序遍历序列
  6. [转载] 字符串操作截取后面的字符串_对字符串的5个必知的熊猫操作
  7. python template_python的Template使用指南
  8. windows系统c语言编译环境,在Windows平台搭建C语言开发环境
  9. (一)数据结构和算法、线性结构
  10. linux 查看pgsql端口,如何通过Linux脚本检查是否已安装PostgreSQL?
  11. java读取摄像头视屏流,Java 摄像头视频获取
  12. 新版抖音二维码生成工具源码+实测可用
  13. 分治法 --- 大整数的乘法
  14. 公众号推送长图最佳尺寸_微信公众平台图片尺寸是多少
  15. android 9指纹认证_Android指纹认证教程
  16. Windows网络诊断和配置常用命令详解
  17. cors nginx 怎么解决_NGINX配置跨域CORS支持的正确方式
  18. python写一个简单的12306抢票
  19. Ps导航栏的简略讲解(一)
  20. 亚信安全中标北方网“津云”项目 护航“云+网”全媒体平台

热门文章

  1. 虚拟机IP更换后 weblogic无法启动 java.net.BindException: 无法指定被请求的地址
  2. 简单使用Idea创建三层架构项目和数据库连接(使用原生ajax进行访问+ajax)
  3. SpringMvc源码入门
  4. 自定义admin组件,Xamin
  5. canvas里图像拖拽操作
  6. 找出数组中的最大值和最小值
  7. NodeMCU实现远程控制LED灯
  8. 1.1 让CPU占用率曲线听你指挥[cpu manager]
  9. VS编译时自动引用Debug|Release版本的dll
  10. IntelliJ IDEA使用技巧(五)——页面乱码和控制台乱码