GameKit在iPhone SDK3.0
-
20-08-2019 - |
解决方案
有两种方法可以做到这一点。
第一种方法采用的GameKit API。您可以通过具有两个独立的类,一个实现了GKSessionDelegate
协议,作为一个的GameKit /蓝牙“处理程序”,另一个作为表示UI(很可能是某种形式的视图控制器的用的tableview)开始。你会连线它的方式是处理程序管理的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);
}
要做到这一点的第二种方法是使用标准的Bonjour服务选择机制。的GameKit是在卓悦的基础上实现的(但蓝牙,而不是无线网络连接),所以一旦双方通过网络可达性去互相连接它们的Bonjour下注册,并像对待任何Bonjour服务。该方法的GameKit可能是更容易一些,但如果你已经有代码的WiFi可以重复使用蓝牙以及。
其他提示
你为什么要使用它?
我不知道有一种方法可以直接自己做一个蓝牙连接,以及它为寻求通过其他方式连接的替代品。它提供了一个相当不错的系统设置若干的iPod /触摸之间的网络,并允许您定义,如果关系是真正的对等或主/从...
不隶属于 StackOverflow