スリープ状態をアプリから解除する
端末の電源ボタンを押す等してスリープ状態に入ったまま、バックグラウンドでプロセスを動かし、なんらかのタイミングでスリープ状態を解除してアプリをresumeしたい場合は
android.os.PowerManagerとandroid.app.KeyguardManagerを使用します。
PowerManagerのWakeLockを使用するとスリープ状態から復帰したり、電源の状態を変えることが出来ます。
http://developer.android.com/reference/android/os/PowerManager.html
スリープ状態から復帰して何らかの処理を行う場合、
- PowerManagerで電源を付ける(スクリーンの照明をつけるかどうかはnewWakeLockのフラグの値で制御する)
- 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(); }