Определить режим полета на iOS - PullRequest
56 голосов
/ 26 января 2011

Как я могу определить, находится ли телефон в режиме полета? (Недостаточно обнаружить, что нет подключения к Интернету, я должен уметь различать эти 2 случая)

Ответы [ 5 ]

20 голосов
/ 26 января 2011

Попробуйте использовать SCNetworkReachabilityGetFlags (инфраструктура SystemConfiguration). Если переменная flags возвращена в 0, а возвращаемое значение - YES, включается режим полета.

Проверьте Apple Классы доступности .

5 голосов
/ 27 января 2011

Вы можете добавить логический флаг SBUsesNetwork, установленный на true, в свой Info.plist для отображения всплывающего окна, используемого в Mail в режиме полета.

2 голосов
/ 08 июня 2017

Для джейлбрейкнутых твиков / приложений:

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

...

bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];
1 голос
/ 29 ноября 2016

Мы не можем получить эту информацию без использования частных библиотек. Вот некоторый код, но он не будет работать, когда сигнал несущей недоступен.

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");
  }
0 голосов
/ 24 марта 2019

Начиная с iOS 12 и Network Framework, каким-то образом можно определить, активен ли режим полета.

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]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...