Jos*_*ley 7 iphone bluetooth ipod-touch
我是否需要使用Peer Picker在新的iPhone SDK 3.0中找到同伴?
我真的不想使用它,但我确实想使用点对点蓝牙连接.是否有任何示例代码在不使用Peer Picker的情况下演示蓝牙连接?Apple提供的游戏GKTank使用了Peer Picker,所以我无法使用它.
Ram*_*min 12
有两种方法可以做到这一点.
第一种方式使用GameKit API.您首先要有两个单独的类,一个实现GKSessionDelegate
协议并充当GameKit /蓝牙"处理程序",另一个充当演示UI(很可能是某种带有tableview的viewcontroller).连接它的方式是处理程序管理GameKit通知等,然后在UI上调用委托方法以在对等体连接/丢弃等时更新表视图.这样,随着设备的来去,你的选择器列表应该更新以显示谁在身边.
以下是一些可以帮助您入门的代码:
- (BOOL) startPeer
{
BOOL result = NO;
if (!_session) {
_session = [[GKSession alloc] initWithSessionID:BLUETOOTHSESSION
displayName:nil
sessionMode:GKSessionModePeer];
_session.delegate = self;
[_session setDataReceiveHandler:self withContext:nil];
_session.available = YES;
result = YES;
}
return result;
}
- (void) stopPeer
{
// Set up the session for the next connection
//
[_session disconnectFromAllPeers];
_session.available = YES;
[self cleanupProgressWindow];
}
- (void) loadPeerList
{
self.peerList = [[NSMutableArray alloc] initWithArray:[_session peersWithConnectionState:GKPeerStateAvailable]];
}
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
{
BOOL peerChanged = NO;
switch(state) {
// When peer list changes, we adjust the available list
//
case GKPeerStateAvailable:
if (_peerList) {
[_peerList addObject:peerID];
peerChanged = YES;
}
break;
// When peer list changes, we adjust the available list
//
case GKPeerStateUnavailable:
if (_peerList) {
[_peerList removeObject:peerID];
peerChanged = YES;
}
break;
// Called when the peer has connected to us.
//
case GKPeerStateConnected:
// start reading and writing
break;
case GKPeerStateDisconnected:
{
if (_isWriter) {
_isConnected = NO;
_deviceToSend = nil;
[self cleanupProgressWindow];
} else {
// Other side dropped, clean up local data and reset for next connection
self.dataRead = nil;
}
}
break;
}
// Notify peer list delegate that the list has changed so they can update the UI
//
if (peerChanged)
CALLDELEGATE(_peerListDelegate, peerListChanged);
}
Run Code Online (Sandbox Code Playgroud)
第二种方法是使用标准的Bonjour服务选择机制.GameKit是在Bonjour之上实现的(但是通过蓝牙而不是WiFi),所以一旦双方通过网络可达性相互连接并连接,它们就会在Bonjour下注册并像任何Bonjour服务那样行事.GameKit方式可能更容易一些,但如果您已经拥有WiFi代码,它也可以重复用于蓝牙.
归档时间: |
|
查看次数: |
15671 次 |
最近记录: |