アプリケーションをインストールした後、初めて Bluetooh でデバイスを接続しようとすると、接続に時間がかかりすぎたり、接続が拒否されたりすることがあります。
これが私のコードです:
(void)setUpSession {
@try {
if(mTimeOutTimer) {
[mTimeOutTimer invalidate];
mTimeOutTimer = nil;
}
self.mConnectionState = ConnectionStateDisconnected;
if(!mPeerPickerController) {
mPeerPickerController = [[GKPeerPickerController alloc] init];
mPeerPickerController.delegate = self;
mPeerPickerController.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
}
//Present Peer Picker.
[mPeerPickerController show];
}
@catch (NSException *exception) {
NSLog(@"Expception Occured at path -> BlueToothManager/setUpSession");
NSLog(@"Exception Name -> %@",[exception name]);
NSLog(@"Exception Reason -> %@",[exception reason]);
}
}
(GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
NSString *deviceName = [[UIDevice currentDevice] name];
GKSession* gkSession = [[GKSession alloc] initWithSessionID:@"BluetoothStreamingVideo" displayName:deviceName sessionMode:GKSessionModePeer];
gkSession.delegate = self;
if(self.mGameKitSession) {
[self.mGameKitSession disconnectFromAllPeers];
if([self.mGameKitSession isAvailable]) {
[self.mGameKitSession setAvailable:FALSE];
}
[self.mGameKitSession setDataReceiveHandler:nil withContext:nil];
self.mGameKitSession = nil;
}
self.mGameKitSession = gkSession;
return [gkSession autorelease];
}
ただし、接続が確立されると、次回の接続は長時間ならずにうまく設定されます。