
強制的にスリープを解除する方法(備忘用の記事。調査中)
以下を参考にしました。
液晶パネルのWakeLockを取得し、Sleep状態からWake状態へ遷移する | TechBooster
実装
上のサイトにある通りのコードで、一応意図した動きになります。ただし、課題があります。
AndroidManifest.xml
<uses-permission android:name="android.permission.WAKE_LOCK" />
import
import android.os.PowerManager; import android.os.PowerManager.WakeLock;
処理
PowerManager pm = (PowerManager) getSystemService(POWER_SERVICE);
PowerManager.WakeLock wakelock =
pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "tag");
// スリープを解除
wakelock.acquire();
// この間だけスリープに入れなくなる(時間制限あり)
// これを呼ぶと再びスリープに入るようになる(すぐではない)
wakelock.release();
※上記コードは、Activity からだけでなく、Service からでも実行可能。
課題
PowerManager.FULL_WAKE_LOCK は非推奨

PowerManager | Android Developers
PowerManager.newWakeLock() の第一引数int levelAndFlagsに指定できるレベルには以下がありますが、FULL_WAKE_LOCK は非推奨です(API Level 17以降)。
| wake lock level | description |
|---|---|
| FULL_WAKE_LOCK | 非推奨(API level 17以降) |
| SCREEN_BRIGHT_WAKE_LOCK | 非推奨(API level 15以降) |
| SCREEN_DIM_WAKE_LOCK | 非推奨(API level 17以降) |
| PARTIAL_WAKE_LOCK | 画面明るくならない |
| PROXIMITY_SCREEN_OFF_WAKE_LOCK | PARTIAL_WAKE_LOCKに似ているが、近接センサがActive |
もっと言うと、指定可能なフラグはPARTIAL_WAKE_LOCKと、API21から追加されたPROXIMITY_SCREEN_OFF_WAKE_LOCK のみです。

FULL_WAKE_LOCK を含む非推奨となったラベルの説明には、いずれも代わりに WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON を使うように書かれています。
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON

WindowManager.LayoutParams | Android Developers
推奨に従って、WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON を使ってみました。
しかし、PARTIAL_WAKE_LOCK + FLAG_KEEP_SCREEN_ON を組み合わせても、スクリーンをONにすることはできませんでした。属性は設定できるものの、スクリーンをONにする効果は無いようです。
尚、WindowManager.LayoutParams.FLAG_xxx は、 Window.setFlags() で設定します。Window は Activity.getWindow() で取得できます。

コード
getWindow().addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON );
Activity.setTurnScreenOn()
同じく、スクリーンをONにする処理として、Activity.setTurnScreenOn() があります。が、こちらも1回は起き上がってくるものの、2回目はうまくいきません。フラグを立てた後に落とす処理を入れても変わりませんでした。待ち時間を入れるなど、何か他に処理が必要なのかもしれません。

コード
setTurnScreenOn( true );
今のところ、FULL_WAKE_LOCK の代替えとして提案されたものの中で、FULL_WAKE_LOCK と同等の処理ができる組み合わせが見つかっていません。ただ、着呼や電源供給時に同じような処理をしているはずで、探せばまだ方法があるように思います。
(以上)