Come posso rilevare se il telefono è in modalità aereo? (Non è sufficiente rilevare che non vi è alcuna connessione Internet, devo essere in grado di distinguere questi 2 casi)Rileva modalità aereo su iOS
risposta
Provare a utilizzare SCNetworkReachabilityGetFlags
(framework SystemConfiguration). Se la variabile flags restituita è 0 e il valore restituito è YES, la modalità aereo è attivata.
Scopri Apple Reachability classes.
Salve, il valore restituito è SÌ e ottengo zero in entrambe le situazioni: 1) Wifi è disabilitato dalle impostazioni e non c'è nessuna scheda SIM nel telefono 2) modalità aereo. Quindi sfortunatamente il tuo suggerimento non risolve il mio problema. – Caner
non è lo stato di raggiungibilità uguale in entrambe le situazioni? ok, lo stato del bluetooth potrebbe essere diverso. – Felix
È possibile aggiungere il flag booleano SBUsesNetwork impostato su true in Info.plist per visualizzare il popup utilizzato in Mail in modalità aereo.
TRANNE che questo non è documentato e potrebbe rompersi in una versione futura di iOS. –
Non possiamo ottenere queste informazioni senza utilizzare librerie private. Ecco un codice ma non funzionerà quando il segnale portante non è disponibile.
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");
}
Per tweaks jailbroken/apps:
@interface SBTelephonyManager : NSObject
+(id)sharedTelephonyManager;
-(BOOL)isInAirplaneMode;
@end
...
bool isInAirplaneMode = [[%c(SBTelephonyManager) sharedTelephonyManager] isInAirplaneMode];
Vuoi spiegarci il motivo ** ** è necessario distinguere questi due casi? Che differenza fa se l'utente non ha una connessione a causa della copertura o della mancanza di connessione a causa della modalità aereo? – Jasarien
Possiamo distinguerlo su altre piattaforme mobili e vorremmo avere la stessa funzionalità su tutte le piattaforme il più possibile. A seconda di ciò, mostriamo messaggi di stato diversi e cerchiamo di guidare l'utente a correggere il problema. – Caner
So che questa è una vecchia domanda, ma solo per chiarire la necessità di questa "situazione straordinariamente stretta": quando un iPhone è in modalità aereo, le posizioni GPS sono estremamente inaffidabili, ma non causano errori. Mi sono iscritto agli eventi GPS e ho lasciato la mia app in esecuzione per 2 ore. Nessun errore, nessuna posizione GPS e tutti i controlli per "può ricevere gli eventi di localizzazione" restituire SI. Tuttavia, disabilitando 3g e wifi manualmente mi ha dato NO per i controlli interni "può ricevere la posizione". È assolutamente necessario rilevare la modalità aereo in modo esplicito rispetto a un controllo generale della raggiungibilità. – Owen