ios - problema - porque se desconfigura la hora de mi iphone
Notificación de cambio de hora de iOS y hora anterior (2)
Tengo una aplicación que funciona con tiempo de espera (digamos -> sonar en 3 días ). Mi problema ocurre si un usuario cambia la hora local del dispositivo mientras está fuera de línea porque estoy comparando dos NSDate (la fecha final y hoy) para verificar ese tiempo de espera.
Así que estoy tratando de recibir una notificación cuando un usuario hizo un cambio de tiempo significativo (varias horas o días) para actualizar mis temporizadores dependiendo de la diferencia entre antes y después de la actualización .
Encontré UIApplicationSignificantTimeChangeNotification , que hace:
Se publica cuando hay un cambio significativo en el tiempo, por ejemplo, se cambia a un nuevo día (medianoche), se actualiza el tiempo del operador y se cambia al horario de verano.
Eso casi encaja pero no puedo descifrar cómo obtener el tiempo "antiguo" para obtener la diferencia. No puedo confiar en un servidor web ni porque la aplicación se ejecute en modo fuera de línea.
Cualquier idea o sugerencia es bienvenida;)
Debe almacenar la hora actual de su dispositivo, cuando su aplicación quede en segundo plano. Cuando la aplicación entra en primer plano, debe tomar la hora actual de su dispositivo. Ahora mida la diferencia entre estas 2 fechas. Si es menor que cero, significa que el usuario ha configurado el dispositivo con la fecha anterior y debe descartar el tiempo de error. Si la diferencia es mayor que 0, entonces debe comparar la hora actual con la fecha de finalización real.
Una forma más indirecta es comenzar el seguimiento de la ubicación de su dispositivo. Manténgalo encendido incluso cuando la aplicación quede en segundo plano. Cuando su delegado didUpdateLocation golpee por el sistema, recibirá el objeto CLLocation en el argumento. Este objeto de ubicación tiene detalles de CurrentTime. Compare la hora de la última ubicación y la ubicación actual. Si es negativo, el usuario ha faroleado con el tiempo. Es hora de tomar la acción.
Finalmente encuentro una manera de resolver mi problema usando el tiempo de la CPU (que siempre aumenta constantemente, excepto al reiniciar).
La primera vez que se lanza la aplicación, obtengo el tiempo Real y el tiempo de CPU.
Luego, cuando necesito verificar si se ha cambiado el tiempo, simplemente tomo
el Tiempo real al principio, lo agrego (el tiempo de CPU actual - el tiempo de CPU al principio).
Esto me da la hora correcta.
Nota: tenga cuidado de usar el tiempo real de la CPU, no el utilizado por el temporizador porque se detiene cuando el dispositivo se apaga.