Jak wykryć, czy telefon jest w trybie samolotowym? (Nie wystarczy wykryć, że nie ma połączenia z Internetem, muszę być w stanie odróżnić te 2 przypadki).Wykryj tryb samolotowy na iOS
Odpowiedz
Spróbuj użyć SCNetworkReachabilityGetFlags
(SystemConfiguration framework). Jeśli zwrócona zmienna flagi wynosi 0, a wartość powrotu to TAK, tryb samolotowy jest włączony.
Sprawdź Apple Reachability classes.
Cześć, zwracana wartość jest TAK i otrzymuję zero w obu tych sytuacjach: 1) Wifi jest wyłączone z ustawień i nie ma karty SIM w telefonie 2) w trybie samolotowym. Więc niestety Twoja sugestia nie rozwiązuje mojego problemu. – Caner
to nie jest stan osiągalności taki sam w obu sytuacjach? ok, status bluetooth może być inny. – Felix
Można dodać flagę logiczną SBUsesNetwork do wartości true w pliku Info.plist, aby wyświetlić okno podręczne używane w programie Mail w trybie samolotowym.
Z WYJĄTKIEM, że jest to nieudokumentowane i może pęknąć w przyszłej wersji systemu iOS. –
Nie możemy uzyskać tych informacji bez korzystania z prywatnych bibliotek. Oto kod, ale nie zadziała, gdy sygnał operatora nie będzie dostępny.
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");
}
Dla jailbroken usprawnieniach/apps:
@interface SBTelephonyManager : NSObject
+(id)sharedTelephonyManager;
-(BOOL)isInAirplaneMode;
@end
...
bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];
Czy możesz wyjaśnić dlaczego ** ** trzeba odróżnić te dwa przypadki? Jaka jest różnica, jeśli użytkownik nie ma połączenia z powodu zasięgu lub braku połączenia z powodu trybu samolotu? – Jasarien
Gdyż możemy to odróżnić na innych platformach mobilnych i chcielibyśmy mieć tę samą funkcjonalność na różnych platformach, jak to tylko możliwe. W zależności od tego wyświetlamy różne komunikaty o stanie i staramy się pomóc użytkownikowi w rozwiązaniu problemu. – Caner
Wiem, że jest to stare pytanie, ale tylko po to, by wyjaśnić potrzebę tej "wyjątkowo wąskiej sytuacji": kiedy iPhone jest w trybie samolotowym, lokalizacje GPS są wyjątkowo niewiarygodne, ale nie powodują błędów. Subskrybowałem zdarzenia GPS i zostawiłem moją aplikację uruchomioną na 2 godziny. Brak błędów, brak lokalizacji GPS i wszystkie sprawdzenia dotyczące "można odbierać zdarzenia lokalizacji" zwracają TAK. Jednak wyłączenie 3g i wifi ręcznie dało mi NIE dla wewnętrznych czeków "można odebrać lokalizację". Zdecydowanie istnieje potrzeba wyraźnego wykrycia trybu samolotowego w przeciwieństwie do ogólnego sprawdzania osiągalności. – Owen