2011-01-26 10 views
49

휴대 전화가 비행기 모드인지 어떻게 알 수 있습니까? (인터넷 연결이 없다는 것을 감지하기에는 충분하지 않습니다.이 두 가지 경우를 구별 할 수 있어야합니다.)iOS에서 비행기 모드 감지하기

+6

당신이 ** 왜 ** 당신은,이 2 개의 경우를 구별 할 필요가 설명 할 것인가? 비행기 모드로 인해 연결 범위가 없거나 연결되지 않아 사용자가 연결되지 않은 경우 어떤 차이가 있습니까? – Jasarien

+12

우리는 다른 모바일 플랫폼에서이 점을 구분할 수 있기 때문에 최대한 많은 플랫폼에서 동일한 기능을 사용하고자합니다. 이에 따라 다른 상태 메시지가 표시되며 사용자에게 문제를 해결하도록 안내합니다. – Caner

+7

이 질문은 오래된 질문이지만,이 '매우 좁은 상황'에 대한 필요성을 분명히하기 위해 : iPhone이 비행기 모드에있을 때 GPS 위치는 매우 신뢰할 만하지만 오류는 발생하지 않습니다. GPS 이벤트를 구독하고 내 앱을 2 시간 동안 운영했습니다. 오류 없음, GPS 위치 없음, '위치 이벤트 수신 가능'에 대한 모든 검사에서 YES를 리턴합니다. 그러나 수동으로 3g 및 Wi-Fi를 사용 중지하면 내부 '위치 수신 가능'확인에 대해 NO가 표시됩니다. 일반적인 접근 가능성 검사와는 달리 비행기 모드를 명시 적으로 탐지 할 필요가 있습니다. – Owen

답변

18

SCNetworkReachabilityGetFlags (SystemConfiguration 프레임 워크)을 사용해보십시오. 되돌려 진 플래그 변수가 0이고 반환 값이 YES이면 비행기 모드가 켜집니다.

애플의 Reachability classes을 확인하십시오.

+5

안녕하세요, 반환 값은 다음과 같은 두 가지 상황에서 모두 0이됩니다. 1) Wi-Fi는 설정에서 사용 중지되었으며 휴대 전화에는 SIM 카드가 없습니다. 2) 비행기 모드. 그래서 불행히도 당신의 제안은 내 문제를 해결하지 못합니다. – Caner

+0

은 두 상황 모두에서 도달 가능성 상태가 아닌가요? 좋아, 블루투스 상태가 다를 수 있습니다. – Felix

5

에어 플레인 모드에서 Mail에 사용 된 팝업을 표시하려면 Info.plist에서 SBUsesNetwork 부울 플래그를 true로 설정하십시오.

+12

이것은 문서화되지 않았으며 향후 iOS 버전에서 중단 될 수 있습니다. –

1

개인 라이브러리를 사용하지 않으면이 정보를 얻을 수 없습니다. 여기에 몇 가지 코드가 있지만 캐리어 신호를 사용할 수없는 경우에는 작동하지 않습니다. 탈옥 비틀기/앱의

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *subviews = [[[app valueForKey:@"statusBar"] valueForKey:@"foregroundView"] subviews]; 

NSString *dataNetworkItemView = nil; 

for (id subview in subviews) { 
    if([subview isKindOfClass:[NSClassFromString(@"UIStatusBarSignalStrengthItemView") class]]) { 
      dataNetworkItemView = subview; 
      break; 
    } 
} 
double signalStrength = [[dataNetworkItemView valueForKey:@"signalStrengthRaw"] intValue]; 
if (signalStrength > 0) { 
     NSLog(@"Airplane mode or NO signal"); 
    } 
    else{ 
     NSLog(@"signal available"); 
    } 
1

:

@interface SBTelephonyManager : NSObject 
+(id)sharedTelephonyManager; 
-(BOOL)isInAirplaneMode; 
@end 

... 

bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode]; 
관련 문제