Я использую GKSession, GKSessionDelegate
, чтобы реализовать одноранговую связь Bluetooth между несколькими устройствами iX (iPod, iPad, iPhone, ...). Я хочу отобразить список доступных/подключенных устройств в диапазоне.Определение того, когда устройства GKSession bluetooth выходят за пределы допустимого диапазона
Я в настоящее время, опираясь на
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
, чтобы сделать это. К сожалению, этот метод, похоже, не надежно называется, когда устройство выходит за пределы допустимого диапазона. Есть ли «лучший» способ определить, находится ли устройство в зоне действия?
Некоторый код:
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
NSString* connectionStateString=
(state==GKPeerStateAvailable)[email protected]"available":
(state==GKPeerStateUnavailable)[email protected]"unavailable":
(state==GKPeerStateConnected)[email protected]"connected":
(state==GKPeerStateDisconnected)[email protected]"disconnected":@"connecting";
// Add the peer to the Dictionary
NSArray* details=[NSArray arrayWithObjects:[session displayNameForPeer:peerID],connectionStateString,nil];
[connectionPeers setObject:details forKey:peerID];
if (state == GKPeerStateAvailable) {
NSLog(@"Adding peerID:%@",peerID);
[session connectToPeer:peerID withTimeout:60];//'connect' to everything, so data can be sent
}
else if (state == GKPeerStateUnavailable || state==GKPeerStateDisconnected) {
[connectionPeers removeObjectForKey:peerID];
}
[self listPlayers];
}
Спасибо за ваш ответ @Mark. Я решил это, периодически отправляя сообщения на все устройства и прослушивая ответ. Если я не получил ответа, я удалил устройство из списка «подключенных». Я не надежно получил «отключенное» изменение состояния, указывающее на то, что устройства, находящиеся вне зоны действия, были всей проблемой. Я все еще думаю, что мое решение довольно ужасно, и я надеюсь, что есть лучший способ. – iPadDeveloper2011
GKSession по bluetooth ужасен;) Я рекомендую смотреть в BTLE и CoreBluetooth API вперёд. –
Спасибо за это @Mark. Я думаю я сделаю. GKSession BT не делал то, что я хотел - диапазон был слишком хорош! Я хотел что-то приблизить прямую видимость. BTLE звучит так, как будто это будет хорошо для этого, а также для связи между различными устройствами (например, Android). – iPadDeveloper2011