Как определить, находится ли телефон в режиме полета? (Недостаточно обнаружить, что нет подключения к интернету, я должен уметь отличать эти 2 случая)Обнаружение режима самолета на iOS
ответ
Попробуйте использовать SCNetworkReachabilityGetFlags
(SystemConfiguration framework). Если возвращаемая переменная флагов равна 0, а возвращаемое значение равно YES, режим самолета включается.
Отъезд Apple's Reachability classes.
Привет, возвращаемое значение ДА, и я получаю нуль в обеих этих ситуациях: 1) Wi-Fi отключен от настроек, и в телефоне нет SIM-карты. 2) Режим полета. Так что, к сожалению, ваше предложение не решает мою проблему. – Caner
не достижимый статус в обеих ситуациях? хорошо, статус bluetooth может отличаться. – Felix
Вы можете добавить флаг буфера SBUsesNetwork, установленный в ваш Info.plist, чтобы отображать всплывающее окно, используемое в Mail, когда он находится в режиме полета.
ЗА ИСКЛЮЧЕНИЕМ, что это недокументировано и может нарушиться в будущей версии iOS. –
Мы не можем получить эту информацию, не используя частные библиотеки. Вот какой-то код, но он не будет работать, если сигнал несущей недоступен.
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");
}
Для взломанных Настройка/приложений:
@interface SBTelephonyManager : NSObject
+(id)sharedTelephonyManager;
-(BOOL)isInAirplaneMode;
@end
...
bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];
ли вы объяснить, почему ** ** Вы должны различать эти два случая? Какая разница, если у пользователя нет связи из-за покрытия или отсутствия соединения из-за режима самолета? – Jasarien
Becuase мы можем отличить это на других мобильных платформах, и мы хотели бы как можно больше использовать те же функции на платформах. В зависимости от этого мы показываем разные сообщения о статусе, и мы пытаемся помочь пользователю исправить проблему. – Caner
Я знаю, что это старый вопрос, но для того, чтобы уточнить необходимость этой «чрезвычайно узкой ситуации»: когда iPhone находится в режиме самолета, места GPS крайне ненадежны, но не вызывают ошибок. Я подписался на события GPS и оставил приложение в течение 2 часов. Никаких ошибок, никаких местоположений gps и всех проверок для возврата событий «может получать данные о местоположении» ДА. Однако отключение 3g и wifi вручную дало мне НЕТ для внутренних проверок «можно получить местоположение». Определенно необходимо четко определить режим полета самолета, а не общую проверку достижимости. – Owen