蓝牙,相信大家都知道是什么,有了它,两台具有蓝牙功能的设备,只要距离相近就可以通信。最近我们游戏需要这个功能,因此这段时间我很大部分时间都在学习这一技术,对于Iphone开发,我们使用GameKit这个库,就可以使用蓝牙功能的API了,这里有一篇不错的文档,里面详细地介绍了怎样使用GameKit的蓝牙API,这是链接:http://tech.it168.com/a2010/0114/837/000000837727.shtml

这里的主题不仅是介绍蓝牙通信,更主要介绍两种方式的获取设备方式,一种是使用系统UI,第二种是使用自定义UI的,前者网上介绍比较多,这里不多介绍了,所以具体介绍第二种:使用自定义的UI来获取蓝牙设备。

1.我们的主角是GKSession* currentSession,通过他,我们可以简单地获取旁边的蓝牙设备。

currentSession = [[GKSession alloc] initWithSessionID:sessionID displayName:name sessionMode:GKSessionModePeer];
currentSession.delegate = self;
[currentSession setDataReceiveHandler:self withContext:nil];
currentSession.available = YES;

2.创建好了GKSession我们需要处理几个回调函数,主要有:

1)接到对方申请连接邀请,这里我们可以弹出一个对话框进行确认.
             - (void)session:(GKSession *)_session didReceiveConnectionRequestFromPeer:(NSString *)_peerID

这里如果我们同意邀请,可以

if (![currentSession acceptConnectionFromPeer:peerID error:&error]) {
                       NSLog(@"%@",[error localizedDescription]);
                       return false;
                  }

如果我们拒绝邀请,可以

[currentSession denyConnectionFromPeer:peerID];

2)连接失败的通知

- (void)session:(GKSession *)_session connectionWithPeerFailed:(NSString *)_peerID withError:(NSError *)_error

3)// The running session ended, potentially due to network failure.
           - (void)session:(GKSession *)_session didFailWithError:(NSError*)_error

4)最重要是下面的回调函数,他处理了搜索到哪些设备,通过一个状态可以区分

- (void)session:(GKSession *)_session peer:(NSString *)_peerID didChangeState:(GKPeerConnectionState)_state

switch (_state) {
case GKPeerStateAvailable:{
// A peer became available by starting app, exiting settings, or ending a call.
if (!isSystemUI) {
if (![peerList containsObject:_peerID]) {
[peerList addObject:_peerID];
}
if (cppDelegate)
{
cppDelegate->BlueToothPeerListDidChange();
}
}
}
break;
case GKPeerStateUnavailable:{
// Peer unavailable due to joining a call, leaving app, or entering settings.
if (!isSystemUI) {
[peerList removeObject:_peerID];
if (cppDelegate)
{
cppDelegate->BlueToothPeerListDidChange();
}
}
}
break;
case GKPeerStateConnected:
NSLog(@"connected! %@", _peerID);
if (!isSystemUI) {
if (oneToN) {
[self addPeerID:_peerID];
[peerList removeObject:_peerID];
}
else {
if (_peerID == peerID) {
NSLog(@"connect main peer!");
self.peerID = _peerID;
self.peerName = _peerName;
currentSession.available = NO;
state = StateConnected;
}
}
}
if (cppDelegate) {
cppDelegate->BlueToothPeerConnectSuccess(pszPeerID, pszPeerName);
}
break;
case GKPeerStateDisconnected:
  。。。
这样我们就可以获取到一个设备列表,下面就是我们需要连接哪一个的时候了。
    3.连接到特定设备
      [currentSession connectToPeer:peerID_ withTimeout:10.0];
 
     这样我们就完成了从创建一个连接,搜索一个设备,连接一个设备的过程,主要都是处理上面的几个回调函数。

Iphone蓝牙通信相关推荐

  1. iPhone 蓝牙通信编程初步(网上收集)

    iPhone 蓝牙通信编程初步 iOS 3.0的最佳功能是GameKit框架,这个框架包括了允许基于蓝牙网络进行通信的API,你可以更轻松地创建点到点的游戏和应用程序.与其它移动平台不 一样,在iPh ...

  2. 轻松易懂arduino低功耗BLE蓝牙通信

    今天我们介绍蓝牙通信的另一种方式--BLE(Bluetooth Low Energy,蓝牙低功耗).         什么是BLE         在<无线通信3:HC05/HC06经典蓝牙BT ...

  3. iPhone蓝牙编程之实现语音聊天 .

    感谢原创人.致敬!! [IT168技术]在我之前的iPhone文章中,我们已经介绍过使用GameKit框架在两个设备之间通过蓝牙通信,在这篇文章中,我将为大家介绍GameKit框架另一个很酷的功能 - ...

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

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

  5. android 输出字节数组,Android蓝牙通信字节数组的数据类型转换 求教!

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 单片机和安卓手机进行蓝牙通信,发送电压数据到手机,恰好每次8位数据(1字节)传给上位机.采用以下代码获得16进制字符输出,以下是蓝牙通信接收并显示数据部分 ...

  6. Android蓝牙通信具体解释

    蓝牙通信的大概过程例如以下: 1.首先开启蓝牙 2,搜索可用设备 3,创建蓝牙socket.获取输入输出流 4,读取和写入数据 5.断开连接关闭蓝牙 还要发送配对码发送进行推断! 以下是全部的源码:不 ...

  7. Android -传统蓝牙通信聊天

    概述 Android 传统蓝牙的使用,包括开关蓝牙.搜索设备.蓝牙连接.通信等. 详细 代码下载:http://www.demodashi.com/demo/10676.html 原文地址: Andr ...

  8. Qt on Android 蓝牙通信开发

    版权声明:本文为MULTIBEANS ORG研发跟随文章,未经MLT ORG允许不得转载. 最近做项目,需要开发安卓应用,实现串口的收发,目测CH340G在安卓手机上非常麻烦,而且驱动都是Java版本 ...

  9. python 蓝牙开发_基于python实现蓝牙通信代码实例

    这篇文章主要介绍了基于python实现蓝牙通信代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 安装和示例 linux下安装 sudo apt ...

  10. android 蓝牙通信编程

    http://blog.csdn.net/yudajun/article/details/8362916 公司项目涉及蓝牙通信,所以就简单的学了学,下面是自己参考了一些资料后的总结,希望对大家有帮助. ...

最新文章

  1. 机器人造iPhone,苹果奋斗八年,还是败给了富士康工人
  2. 掏空老底,值得推荐的10个学习神器,总有一个用得上!
  3. unittest框架学习笔记
  4. python白名单验证是什么意思_第10.5节 使用__all__定义Python模块导入白名单
  5. staticextension 上提供值时引发了异常_干!一张图整理了 Python 所有内置异常
  6. java后台开发加密程序_Java后端实现MD5加密的方法
  7. 一口气完成electron的入门学习
  8. switch case异常处理机制
  9. python定义变量类型列子_Python系列课程-变量类型
  10. 场景文字检测OD与字符识别OCR概述
  11. 工业自动化控制-组态王1
  12. Python某地区二手房房价数据分析
  13. 《广义动量定理与系统思考----战争…
  14. 在Win10中安装Openfoam
  15. .NET 高级架构师0003 架构师之路(2)---架构师的职责
  16. C#彩色艺术化二维码样式设计(仅说思路)
  17. 带哨兵节点的链_第五章:部署带安全认证的3节点哨兵集群
  18. 技术支持程序员程序书写规范
  19. idea git rebase ---- 合并多个提交到某个分支(实用)
  20. Ubuntu中出现sudo:unknown uid 1000:who are you?

热门文章

  1. RS-485位移传感器集线器的功能大家了解吗?
  2. c# 贪婪匹配 html,C#正则表达式之贪婪模式
  3. STM32HAL库微秒延时函数的实现---DWT和SysTick
  4. TFTPD32无法传输
  5. 谷歌浏览器上传图片和图片另存为就卡死崩溃解决方案
  6. android 手机桌面角标,华为手机设置桌面图标角标提醒的实现
  7. python的key函数_由 sort 中 key 的用法浅谈 python
  8. [Microsoft Lync] Find a previous conversation - Chat History
  9. 数据库系统的主要组成部分
  10. 监控摄像头进行网页直播和微信直播的技术方案