la mia applicazione può ricevere notifiche in caso di modifica del fuso orario del dispositivo? Voglio ricevere una notifica quando la mia applicazione è in primo piano. NSTimezone non ha funzionato per me poiché devo controllare continuamente il fuso orario.ricevere notifiche sulla modifica del fuso orario in iOS
risposta
UIApplicationDelegate
ha un metodo chiamato applicationSignificantTimeChange:
che viene chiamato quando c'è un cambiamento significativo nel tempo.
Gli esempi elencati nella documentazione sono:
Esempi di significativi cambiamenti di tempo includono l'arrivo della mezzanotte, un aggiornamento del tempo da un vettore, e il passaggio all'ora legale
Ma suppongo che i cambiamenti del fuso orario contino come un cambiamento di orario significativo.
I documenti dicono anche che se il cambio di orario succede quando la vostra applicazione è in background si ottiene quando si va al primo piano
Se l'applicazione è attualmente sospesa, questo messaggio è in coda fino a quando il l'applicazione ritorna in primo piano, a quel punto viene consegnata.
È anche possibile ascoltare UIApplicationSignificantTimeChangeNotification
da pubblicare per ottenere le stesse informazioni in qualsiasi altro punto della propria app.
Ho notato che il metodo observer è invocato quando l'app è messa in primo piano e NON e non nella durata quando l'app è in background e l'utente cambia il fuso orario o si sposta in un fuso orario diverso. È questo il comportamento previsto? Su Android, tali trasmissioni vengono inviate all'app anche se l'app è in background, ma mi rendo conto che si tratta di due sistemi operativi diversi con un design molto diverso. –
Appena notato qui https://developer.apple.com/reference/uikit/uiapplicationdelegate/1622992-applicationsignificanttimechange che viene effettivamente consegnato quando è in primo piano. Immagino che ora ho bisogno di trovare un modo se riesco a capirlo mentre l'app è in background. Forse usare il recupero dello sfondo per realizzarlo. –
Tutte le notifiche iOS che si osservano vengono accodate fino a quando l'app non viene visualizzata in primo piano. Se devi gestire qualcosa in particolare mentre l'app è in background, puoi eseguire il recupero in background. Dovrai ottenere un "diritto" da parte di Apple per eseguire l'elaborazione in background. – leanne
Basta ascoltare NSSystemTimeZoneDidChangeNotification
.
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(timeZoneChanged) name: NSSystemTimeZoneDidChangeNotification object:nil];
E ricordarsi di annullare la registrazione, ad esempio nel metodo dealloc.
[[NSNotificationCenter defaultCenter] removeObserver:self name:NSSystemTimeZoneDidChangeNotification object:nil];
Ho notato che il metodo observer "timeZoneChanged here" è invocato quando l'app è messa in primo piano e NON e non nella durata quando l'app è in background e l'utente cambia il fuso orario o si sposta in un fuso orario diverso. È questo il comportamento previsto? Su Android, tali trasmissioni vengono inviate all'app anche se l'app è in background, ma mi rendo conto che si tratta di due sistemi operativi diversi con un design molto diverso. –
Ricevi questa notifica una volta ripristinata l'app. –
controllo questo https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSTimeZone_Class/Reference/Reference.html –
verifica questo http://stackoverflow.com/questions/13741585/notify-app-when-ipad-date-time-settings-changed –