2011-02-09 18 views
13

En cuanto a los eventos del iPad, ¿cómo determinar si el iPad está cambiando de estado de alerta a estado de espera?Manejo del modo de espera en iPad con Javascript

Lo que me gustaría hacer es poner mi aplicación web Mobile-Safari en un estado bloqueado cada vez que el iPad se vuelva inactivo/en espera y pedir un PIN cuando se vuelva a activar.

Respuesta

31

Estoy de acuerdo en que realmente debería haber alguna señal que pueda engancharse para saber cuándo se va a dormir una aplicación y cuándo se despierta, pero debería ser capaz de averiguar cuándo se despierta Safari indirectamente.

Cuando la vista web pasa a segundo plano, Safari pone todo en ella para dormir. Pausa cualquier video, aplaza la solicitud de red, detiene la actualización de la interfaz de usuario y pausa todas las operaciones setInterval/setTimeout. JS nunca se dará cuenta (por lo que puedo decir) de cómo sucedieron estas cosas, pero puede decir que ha sucedido. La forma más sencilla de usar esto es compilar un método invocado con regularidad y verificar si ha pasado mucho tiempo desde la última actualización. Si espera que algo se actualice cada 10 segundos y han pasado cinco minutos, puede estar bastante seguro de que el dispositivo se ha activado. Aquí está un ejemplo rápido se me ocurrió:

var intTime = new Date().getTime(); 
    var getTime = function() { 
     var intNow = new Date().getTime(); 
     if (intNow - intTime > 1000) { 
      console.log("I JUST WOKE UP") 
     } 
     intTime = intNow; 
     setTimeout(getTime,500); 
    }; 
    getTime(); 

Esto permitirá detectar cuando el usuario ha de regresar de otra ficha, ha desestimado la consola de desarrollador o traído de nuevo Safari en el fondo. He establecido el intervalo en medio segundo; puedes configurarlo en cualquier cosa que necesites, aunque creo que los valores muy bajos tendrán problemas de concurrencia y probablemente quemarán la batería del dispositivo innecesariamente.

+0

Gracias Andrew. Ya tengo temporizadores "inactivos" en mi aplicación web, que es un correo web con un cliente de mensajería instantánea, entre otras características interesantes. No había pensado utilizar uno de esos temporizadores para detectar si el iPad ha estado inactivo durante un período de tiempo. Supongo que tendrá que hacer por ahora. ¡Aclamaciones! – rcarrier

+0

Muy inteligente, gracias! – Codebeat

+0

Creo que puedes disminuir el intervalo para verificar 1 o 2 segundos porque la mayoría de las acciones tardan al menos 1 o 2 segundos en hacerlo si no estás paranoico ;-). – Codebeat

1

El Mobile Safari no tiene acceso a este nivel de estado del hardware. Lo más que creo que tiene es al acelerador.

+0

Gracias Daniel, acabo de encontrar este enlace también relacionado con este http://stackoverflow.com/questions/4401764/what-event-fires- when-a-webkit-webapp-is-terminated – rcarrier

+0

No puedo imaginarme que sería tan difícil enviar aplicaciones (incluyendo Mobile Safari) una señal de "advertencia de terminación inminente" que usted podría escuchar y planificar en consecuencia. Quiero decir que iOS probablemente tiene ese tipo de información de estado del hardware en sí ... "simplemente" empujándolo a la capa de aplicación * debería * ser factible? – rcarrier

+0

@rcarrier ¿Qué harías con tal señal? Si ejecuta el código después de recibir la terminación inminente, retrasaría o, peor aún, evitaría el sueño. Imagine una aplicación web "mala" que impide que su dispositivo móvil permanezca en espera y agote su batería. Si no ejecuta el código, la señal en sí misma es inútil. – janesconference

0

Una posible solución que trabajó para mí es utilizar

$(window).on('blur', function(){}); 
Cuestiones relacionadas