スリープ状態をアプリから解除する

端末の電源ボタンを押す等してスリープ状態に入ったまま、バックグラウンドでプロセスを動かし、なんらかのタイミングでスリープ状態を解除してアプリをresumeしたい場合は
android.os.PowerManagerとandroid.app.KeyguardManagerを使用します。

PowerManagerのWakeLockを使用するとスリープ状態から復帰したり、電源の状態を変えることが出来ます。
http://developer.android.com/reference/android/os/PowerManager.html


スリープ状態から復帰して何らかの処理を行う場合、

  1. PowerManagerで電源を付ける(スクリーンの照明をつけるかどうかはnewWakeLockのフラグの値で制御する)
  2. KeyguardManagerでスクリーンロックを解除する

という流れになります。

private WakeLock wakelock;
private KeyguardLock keylock;

//中略

//スリープ状態から復帰する
wakelock = ((PowerManager) getSystemService(Context.POWER_SERVICE))
		.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK
				| PowerManager.ACQUIRE_CAUSES_WAKEUP
				| PowerManager.ON_AFTER_RELEASE, "disableLock");
wakelock.acquire();

//スクリーンロックを解除する
KeyguardManager keyguard = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
keylock = keyguard.newKeyguardLock("disableLock");
keylock.disableKeyguard();

/**
    処理
*/


PowerManager.WakeLockの操作はバッテリーの状態に影響を与えるので、使い終わったらリリースする処理を忘れないようにしましょう。

@Override
public void onPause() {
	super.onPause();

	wakelock.release();
	keylock.reenableKeyguard();
}