Development Tip

iOS에서 비행기 모드 감지

yourdevel 2020. 12. 31. 23:04
반응형

iOS에서 비행기 모드 감지


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


SCNetworkReachabilityGetFlags(SystemConfiguration 프레임 워크)를 사용해보십시오 . 전달 된 flags 변수가 0이고 반환 값이 YES이면 비행기 모드가 켜집니다.

Apple의 Reachability 클래스를 확인하십시오 .


Info.plist에서 true로 설정된 SBUsesNetwork 부울 플래그를 추가하여 비행기 모드에서 메일에 사용되는 팝업을 표시 할 수 있습니다.


탈옥 한 조정 / 앱의 경우 :

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

...

bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];

개인 라이브러리를 사용하지 않고는이 정보를 얻을 수 없습니다. 다음은 일부 코드이지만 반송파 신호를 사용할 수없는 경우 작동하지 않습니다.

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");
  }

iOS 12 및 네트워크 프레임 워크 이후로 비행기 모드가 활성 상태인지 감지하는 것이 가능합니다.

import Network

let monitor = NWPathMonitor()

monitor.pathUpdateHandler = { path in
    if path.availableInterfaces.count == 0 { print("Flight mode") }
    print(path.availableInterfaces)
}

let queue = DispatchQueue.global(qos: .background)
monitor.start(queue: queue)

path.availableInterfaces배열을 반환합니다. 예를 들면 [en0, pdp_ip0]. 사용 가능한 인터페이스가 없으면 비행 모드 일 수 있습니다.

경고 비행기 모드와 Wi-Fi가 활성화 된 경우 path.availableInterfaces다시 돌아 오기 때문에 비어 있지 않습니다.[en0]

참조 URL : https://stackoverflow.com/questions/4804398/detect-airplane-mode-on-ios

반응형