Iphone蓝牙通信
来源:互联网 发布:淘宝开店要交保证金吗 编辑:程序博客网 时间:2024/05/16 17:38
蓝牙,相信大家都知道是什么,有了它,两台具有蓝牙功能的设备,只要距离相近就可以通信。最近我们游戏需要这个功能,因此这段时间我很大部分时间都在学习这一技术,对于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蓝牙通信
- iPhone 掌握蓝牙通信编程
- iPhone 掌握蓝牙通信编程
- iPhone 掌握蓝牙通信编程
- iPhone 掌握蓝牙通信编程初体验
- iPhone 蓝牙通信编程初步(网上收集)
- iPhone 蓝牙通信编程初步(网上收集)
- iPhone 掌握蓝牙通信编程初体验 (百度文库)
- iphone蓝牙
- [蓝牙]蓝牙通信浅谈
- 蓝牙通信
- 蓝牙通信
- 蓝牙通信
- 蓝牙通信
- 蓝牙通信
- 蓝牙通信
- Android 蓝牙开发-蓝牙通信
- iphone 蓝牙开发 总结
- 硕士小论文格式
- 深入浅出 MFC多视图
- 生成iPa的方法
- QT 跨平台编译
- 大话西游搞笑
- Iphone蓝牙通信
- 【揭秘VC CRT库Intel模块】-- strlen
- dialog及gdialog命令测试
- 怎样花两年时间去面试一个人
- strlen 和 sizeof 的区别
- 【動態規劃】導彈攔截
- Java抓取网页乱码解决
- 爱情测试
- SQLHelper数据库通用访问类(第三版)