2011-02-09 3 views
13

Что касается событий iPad, как определить, меняется ли iPad из состояния готовности в состояние ожидания?Работа в режиме ожидания на iPad с использованием Javascript

Что бы я хотел сделать, это поместить мое приложение Mobile-Safari в заблокированное состояние всякий раз, когда iPad становится неактивным/ждущим и запрашивает PIN-код, когда он снова проснется.

ответ

31

Я согласен с тем, что действительно должен быть какой-то сигнал, с помощью которого вы можете узнать, когда приложение ложится спать и когда оно просыпается, но вы должны быть в состоянии выяснить, когда Safari просыпается косвенно.

Когда веб-просмотр переходит в фоновый режим, Safari помещает все в него, чтобы спать. Он приостанавливает любое видео, отменяет сетевой запрос, останавливает обновление пользовательского интерфейса и приостанавливает все операции setInterval/setTimeout. Сам JS никогда не будет знать (насколько я могу судить), как это произошло, но может сказать, что это произошло. Самый простой способ использовать это - создать регулярно вызываемый метод и проверить, было ли это неожиданно LONG время с момента последнего обновления. Если вы ожидаете, что что-то обновится каждые 10 секунд, и прошло пять минут, вы можете быть уверены, что устройство проснулось. Вот краткий пример, который я придумал:

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(); 

Это определяет, когда пользователь возвращается из другой вкладки, уволила консоль разработчика или вернуть Safari от фона. Я установил интервал в полсекунды; вы можете установить его на все, что вам нужно, хотя я думаю, что очень низкие значения будут иметь проблемы с параллелизмом и, вероятно, сжечь батарею на устройстве без необходимости.

+0

Спасибо Эндрю. У меня уже есть «незанятые» таймеры в моем веб-приложении, которое является электронной почтой с IM-клиентом среди других интересных функций. Я не думал об использовании одного такого таймера, чтобы определить, был ли iPad неактивным в течение определенного периода времени. Наверное, теперь это нужно будет сделать. Ура! – rcarrier

+0

Очень умный, спасибо! – Codebeat

+0

Я думаю, вы можете уменьшить интервал, чтобы проверить на 1 или две секунды, потому что для большинства действий требуется не менее 1 или 2 секунд, если вы не параноидны ;-). – Codebeat

1

У Mobile Safari нет доступа к этому уровню состояния оборудования. Самое большее, что я думаю, это ускоритель.

+0

Спасибо Даниила, я только что нашел эту ссылку, также связанную с этим http://stackoverflow.com/questions/4401764/what-event-fires- когда-a-webkit-webapp-is-terminated – rcarrier

+0

Я просто не могу себе представить, что было бы так сложно отправить приложения (в том числе Mobile Safari) сигнал «неизбежного прекращения-предупреждения», который вы могли бы слушать и планировать соответственно. Я имею в виду, что у iOS, вероятно, есть такая информация о состоянии оборудования ... «просто», подталкивая его к прикладному уровню * должен * быть выполнимым? – rcarrier

+0

@rcarrier Что бы вы сделали с таким сигналом? Если вы выполняете код после получения неизбежного завершения, вы задерживаете или, что еще хуже, предотвращаете спящий режим. Представьте себе «плохое» веб-приложение, препятствующее мобильному устройству работать в режиме ожидания и истощая батарею. Если вы не выполняете код, сам сигнал бесполезен. – janesconference

0

Одно из возможных решений, которые работали для меня, чтобы использовать

$(window).on('blur', function(){}); 
Смежные вопросы