AndroidのPowerManager(電源マネージャ)にはWakeLockという仕組みがあります。PCでも一定時間放置しているとスクリーンセーバーになったり、スリープしたりしますよね。WakeLockは、簡単に言うと一定時間経過後に勝手に画面がOFFになってしまったり端末がスリープしたりすることを防ぎたいときに使うものです。以下のような種類があります。
| フラグ | CPU | 画面 | キーボード |
|---|---|---|---|
| PARTIAL_WAKE_LOCK | On | Off | Off |
| SCREEN_DIM_WAKE_LOCK | On | Dim(薄暗い) | Off |
| SCREEN_BRIGHT_WAKE_LOCK | On | Bright(明るい) | Off |
| FULL_WAKE_LOCK | On | Bright | Bright(明るい) |
例えば、SCREEN_BRIGHT_WAKE_LOCKを設定すると、その間は、画面のライトはつきっぱなし、CPUもアクティブのままになります。ただしユーザーが明示的に端末の電源ボタンを押したときは、スリープします。PARTIAL_WAKE_LOCKだけが少し特殊で、ユーザーが電源ボタンを押して端末をスリープさせても、CPUは動き続けます。ユーザーのポケットの中に端末がある間も、センサーの値を取得したりGPSの値を取得したりしたいときに使います。(1.5からPARTIAL_WAKE_LOCKのときにセンサーの値が取得できるようになっているようです。)
コードとしてはすごく簡単です。
WakeLock wakelock = ((PowerManager)getSystemService(Context.POWER_SERVICE)).newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "[タグ名となる適当な文字列]");
・・・
// wakelockを取得
wakelock.acquire();
・・・
(処理)
・・・
// wakelockを解放
wakelock.release();
releaseは忘れないように、finallyなどでやった方がいいと思います。あと、容易に想像できますが、かなり電池食います。