lanya1

编程入门 行业动态 更新时间:2024-10-25 04:20:01

lanya1

lanya1

[iPhone]iPhone蓝牙通信 GameKit框架 下

检测到远程蓝牙设备,用户选择并连接到其中一个蓝牙设备时,调用peerPickerController:didConnectPeer:toSession:方法,这个方法的实现如下:1 - (void)peerPickerController:(GKPeerPickerController *)picker

3   didConnectPeer:(NSString *)peerID

5   toSession:(GKSession *) session {

7   self.currentSession = session;

9   session.delegate = self;
10 
11   [session setDataReceiveHandler:self withContext:nil];
12 
13   picker.delegate = nil;
14 
15   [picker dismiss];
16 
17   [picker autorelease];
18 
19   }
20 
21

  当用户已经连接到对等蓝牙设备后,可以将GKSession对象保存到currentSession属性中,这样你可以使用GKSession对象与远程设备通信。

  如果用户取消了蓝牙选择器,调用peerPickerControllerDidCancel:方法,其定义如下:

1  - (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker

3   {

5   picker.delegate = nil;

7   [picker autorelease];

9   [connect setHidden:NO];
10 
11   [disconnect setHidden:YES];
12 
13   }
14 
15

  如果要从一个设备断开连接,使用来自GKSession对象的disconnectFromAllPeers方法,btnDisconnect:方法的实现如下:

1  -(IBAction) btnDisconnect:(id) sender {

3   [self.currentSession disconnectFromAllPeers];

5   [self.currentSession release];

7   currentSession = nil;

9   [connect setHidden:NO];
10 
11   [disconnect setHidden:YES];
12 
13   }
14 
15

  连接设备或断开连接时,调用session:peer:didChangeState:方法,其实现如下:

1 - (void)session:(GKSession *)session

3   peer:(NSString *)peerID

5   didChangeState:(GKPeerConnectionState)state {

7   switch (state)

9   {
10 
11   case GKPeerStateConnected:
12 
13   NSLog(@"connected");
14 
15   break;
16 
17   case GKPeerStateDisconnected:
18 
19   NSLog(@"disconnected");
20 
21   [self.currentSession release];
22 
23   currentSession = nil;
24 
25   [connect setHidden:NO];
26 
27   [disconnect setHidden:YES];
28 
29   break;
30 
31   }
32 
33   }
34 
35

  处理这个事件你将知道连接是什么时候建立的,或断开是什么时候发生的。例如,当建立一个连接时,你可能想要立即向对方发送数据。

  发送数据

   为了向连接的蓝牙设备发送数据,需要使用到GKSession对象的sendDataToAllPeers:方法,你发送的数据是通过NSData对象 传输的,因此你可以自定义你的应用程序协议和发送的数据类型(如二进制数据),mySendDataToPeers:方法的定义如下:

1  - (void) mySendDataToPeers:(NSData *) data

3   {

5   if (currentSession)

7   [self.currentSession sendDataToAllPeers:data

9   withDataMode:GKSendDataReliable
10 
11   error:nil];
12 
13   }
14 
15   再定义btnSend:方法,以便用户输入的数据能够发送到远程设备:
16 
17   -(IBAction) btnSend:(id) sender
18 
19   {
20 
21   //---convert an NSString object to NSData---
22 
23   NSData* data;
24 
25   NSString *str = [NSString stringWithString:txtMessage.text];
26 
27   data = [str dataUsingEncoding: NSASCIIStringEncoding];
28 
29   [self mySendDataToPeers:data];
30 
31   }
32 
33

  接收数据

  当设备接收到数据时,调用receiveData:fromPeer:inSession:context:方法,其实现如下:

1 - (void) receiveData:(NSData *)data

3   fromPeer:(NSString *)peer

5   inSession:(GKSession *)session

7   context:(void *)context {

9   //---convert the NSData to NSString---
10 
11   NSString* str;
12 
13   str = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
14 
15   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Data received"
16 
17   message:str
18 
19   delegate:self
20 
21   cancelButtonTitle:@"OK"
22 
23   otherButtonTitles:nil];
24 
25   [alert show];
26 
27   [alert release];
28 
29   }
30 
31

  这里接收到的数据是NSData格式,为了使用UIAlertView类显示它,你需要将其转换为NSString对象。

  

测试应用程序

  就是这么简单!现在可以开始测试了,在Xcode中按下Command-R,将程序部署到iPhone/iPod上,本文假设你有两部iPhone或两部iPod,为了运行刚刚创建的程序,这两台设备上都需要运行iPhone OS 3.0。

  部署好程序后,在两台设备上启动好程序,在任一设备上点击连接按钮,GKPeerPickerController将会显示标准的UI发现其它设备,如图4所示。

  

  图 4 GKPeerPickerController查找其它设备

  等待一会儿后,两边的程序应该都能够发现对方,如图5所示,当你在发现的设备名称上轻轻点击,程序就会开始连接。

  

  图 5 显示发现的设备名称

  注意:如果你在iPhone模拟器上测试这个程序,应该会检测到两个设备,但却无法连接到任何设备。

  当其它设备试图连接到你的设备时,你将会看到如图6所示的弹出提示,点击“接受”允许其连接,点击“拒绝”拒绝其连接。

  

  图 6 其它设备试图连接到你时的提示

  如果成功与你建立了连接,你就可以输入一些文本信息发给对方了,从其它设备接收到数据将会以一个警告视图显示,如图7所示。

  

  图 7 接收到其它设备发来的数据

更多推荐

lanya1

本文发布于:2024-02-26 17:14:42,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703282.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!