나는 많은 iX (iPod, iPad, iPhone, ...) 장치간에 피어 투 피어 블루투스 연결을 구현하기 위해 GKSession, GKSessionDelegate
을 사용하고 있습니다. 현재 사용 가능한/연결된 장치 목록을 범위에 표시하려면 을 표시하고 싶습니다.GKSession 블루투스 장치가 범위를 벗어날 때 결정
나는 현재이 작업을 수행
- (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];
}
답장을 보내 주셔서 감사합니다. @ 마크. 필자는 정기적으로 모든 장치에 메시지를 보내고 응답을 수신하여이 문제를 해결했습니다. 응답을받지 못하면 '연결됨'목록에서 장치를 제거했습니다. 나는 안정적으로 '연결이 끊어진'상태 변화를 얻지 못했고, 이는 장치가 범위를 벗어난 곳, 즉 전체적인 문제임을 나타냅니다. 나는 여전히 나의 해결책이 꽤 끔찍하다고 생각하며, 더 좋은 방법이 있다고 희망한다. – iPadDeveloper2011
GKSession over bluetooth는 끔찍합니다.) 앞으로 BTLE과 CoreBluetooth API를 살펴 보는 것이 좋습니다. –
@Mark에 감사드립니다. 내 생각에 나 할것 같아. GKSession BT는 내가 원하는 것을하지 않았습니다 - 범위가 너무 좋았습니다! 나는 시선과 비슷한 것을 원했다. BTLE은 그게 좋을 것 같고 다른 장치 (예 : 안드로이드) 사이에서도 통신합니다. – iPadDeveloper2011