为什么GKSession在设备上运行时总是尝试使用蓝牙,而不是在模拟器上?

时间:2012-06-05 12:04:14

标签: iphone wifi p2p gamekit gksession

我正在尝试在不使用GKPeerPickerController的情况下实现GameKit连接。我需要的是建立WiFi连接,而不是蓝牙。

我就是这样做的

self.gameSession = [[GKSession alloc] initWithSessionID:@"test" displayName:nil sessionMode:GKSessionModePeer];
self.gameSession.available = YES;
self.gameSession.delegate = self;
self.gameSession.disconnectTimeout = 0;
[self.gameSession setDataReceiveHandler:self withContext:nil];

我的问题是设备总是尝试通过蓝牙连接。至少我认为是因为以下内容总是出现在控制台中

  

BTM:附加到BTServer

即使我关闭蓝牙,它总是试图处理蓝牙,而不是wifi。此外 - 如果蓝牙开启 - 如果我不使用GKPeerPickerController,设备永远不会看到对方。 此外,模拟器永远不会试图寻找蓝牙,并始终能够建立WiFi连接,并轻松找到任何设备。如何让GKSession选择WiFi连接?

1 个答案:

答案 0 :(得分:0)

可能是您使用越狱设备的问题,

GKSession和GKSessionDelegate实现适用于蓝牙和WiFi。

这两个类检查wifi和蓝牙,并选择合适的传输介质。

如果你的iPhone是Jailbroken,那么在连接这些传输介质时可能会出现蓝牙或wifi的一些问题,这可能会阻止正确使用游戏套件。

并尝试使用

picker.connectionTypesMask = GKPeerPickerConnectionTypeOnline

使用委托方法中的条件检查

if (type == GKPeerPickerConnectionTypeOnline) {
}

更新:

参考Apple的示例代码.. https://developer.apple.com/library/ios/#samplecode/GKTapper/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010283