2011-02-09 7 views
13

iPadのイベントに関して、iPadが起床状態からスタンバイ状態に移行するかどうかを判断する方法はありますか?Javascriptを使用したiPadのスタンバイの処理

私がしたいのは、iPadが非アクティブ/スタンバイになり、再び起きたときにPINを要求すると、Mobile-Safari Webアプリケーションがロック状態になることです。

答えて

31

私は、アプリケーションがスリープ状態になったときと起きるときを知るためには、本当に何かの信号があるはずですが、Safariが間接的に起きるときを把握できるはずです。

ウェブビューがバックグラウンドに入ると、Safariはその中のすべてをスリープ状態にします。ビデオを一時停止し、ネットワーク要求を延期し、UIの更新を停止し、すべてのsetInterval/setTimeout操作を一時停止します。 JS自体は、これらのことがどのように起こったかを知ることはできませんが、それが起こったことを伝えることができます。これを使用する最も簡単な方法は、定期的に呼び出されるメソッドを構築し、最後の更新から予期せず長い時間が経過したかどうかを確認することです。 10秒ごとに何かが更新されることが予想され、5分が経過していれば、デバイスが起動していることをかなり確信で​​きます。ここに私が思いついた簡単な例です:

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

ユーザーが別のタブから戻ってきたとき、これが検出されますが、デベロッパーコンソールを却下したり、背景からサファリを持ち帰りました。私は半分の間隔を設定しました。非常に低い値には並行性の問題があり、おそらくデバイス上のバッテリが不必要に消費されると思うが、あなたが必要とするものに設定することができる。私のために働いた

+0

ありがとうアンドリュー。私はすでにIMクライアントのウェブメールである私のウェブアプリで他の興味深い機能の中で "アイドル"タイマーを持っています。私はそのようなタイマーを使って、iPadが一定期間稼動していないかどうかを検出することは考えていませんでした。私はそれが今の間しなければならないと思う。乾杯! – rcarrier

+0

非常にスマート、ありがとう! – Codebeat

+0

私は、1秒または2秒にチェックする間隔を減らすことができると思います。なぜなら、あなたが妄想的ではない場合、ほとんどの行動が少なくとも1または2秒かかるからです;-)。 – Codebeat

1

モバイルSafariは、このレベルのハードウェア状態にアクセスできません。私が思っているのはアクセラレータです。

+0

を使用するおかげでダニエルは、私はまた、このhttp://stackoverflow.com/questions/4401764/what-event-fires-に関連するこのリンクを発見されましたweb-app-terminated-when-a-webkit-webapp-is-terminated – rcarrier

+0

私はアプリ(Mobile Safariを含む)にあなたが聞くことができ、それに応じて計画する "差し迫った終了警告"信号を送るのはとても難しいとは思いません。私は、おそらくiOSがそのようなハードウェア状態情報そのものを持っていることを意味しています... "単に"それをアプリケーションレイヤーにプッシュ*するべきですか? – rcarrier

+0

@rcarrierあなたはそのような信号で何をしますか?差し迫った打ち切りを受けた後にコードを実行すると、睡眠を遅らせるか、悪化させるでしょう。あなたの携帯端末がスタンバイして電池を消耗するのを防ぐ「悪い」ウェブアプリケーションを想像してみてください。コードを実行しないと、シグナル自体は役に立たなくなります。 – janesconference

0

一つの可能​​な解決策は、

$(window).on('blur', function(){}); 
関連する問題