WakeLockを試す

HTC Desireで試した。
端末によって、異なる動作があるかもしれないので注意。

端末の設定

ディスプレイ>省電力を15秒にして、15秒放置するとスクリーンがOFFになるようにする。

ディスプレイの状態遷移

・明るい画面(SCREEN_BRIGHT)
・キーボード(Homeボタンとか)点灯

10秒くらい放置

・薄暗い画面(SCREEN_DIM)
・キーボード(Homeボタンとか)はまだ点灯

さらに5秒くらい放置(計15秒)

・真っ暗な画面。スクリーンOFF
・キーボード(Homeボタンとか)も消灯

WakeLock#acquire()のコード

				PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
				wakeLock = powerManager.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "tag a");
				wakeLock.acquire();

newWakeLockで指定した状態が保持されるようになる。
上記(SCREEN_BRIGHT_WAKE_LOCK)の場合は、明るい画面+キーボード点灯が保持された。
SCREEN_DIM_LOCKの場合は、薄暗い画面+キーボード点灯が保持された。
しかし、PowerManager | Android Developersによると、それぞれキーボードはOFFとなっているように読める。Desireだからなのか、たんに誤読なのかは不明。

各フラグの違いは下記参照。

If you hold a partial wakelock, the CPU will continue to run, irrespective of any timers and even after the user presses the power button. In all other wakelocks, the CPU will run, but the user can still put the device to sleep using the power button.

In addition, you can add two more flags, which affect behavior of the screen only. These flags have no effect when combined with a PARTIAL_WAKE_LOCK.

PowerManager | Android Developers http://developer.android.com/intl/ja/reference/android/os/PowerManager.html

PERTIAL_WAKE_LOCKの場合は、ユーザが電源ボタンを押してもCPUは動き続けるけど、それ以外の場合はユーザが電源ボタンを押すとCPUは止まるらしい。