私の要件は次のとおりです。 [〜#〜] gcm [〜#〜] メッセージが到着した後、デバイスはウェイクアップして優先度の高い通知を表示する必要があります。デバイスは画面をオンにする必要があります。
現在、これを実現するために WakeLock を使用しています。 newWakeLock()
メソッドは、ロックレベルとフラグが渡されることを期待します(最初のパラメーターとして、ビット単位または 'd)。
PowerManager.ACQUIRE_CAUSES_WAKEUP
フラグを使用しているのは、必要なことを正確に実行するためです。しかし、私はロックレベルについて少しイライラしています。したがって、 docs によると、次のオプションがあります。
PARTIAL_WAKE_LOCK
--ACQUIRE_CAUSES_WAKEUP
と互換性がありません/画面がオンになりませんSCREEN_DIM_WAKE_LOCK
-非推奨SCREEN_BRIGHT_WAKE_LOCK
-非推奨FULL_WAKE_LOCK
-非推奨提案されたFLAG_KEEP_SCREEN_ON
は、このシナリオではまったく役に立ちません。結局、非推奨の警告を抑制しました。
@SuppressWarnings("deprecation")
PowerManager.WakeLock screenOn = ((PowerManager) c.getSystemService(Context.POWER_SERVICE)).newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, TAG);
screenOn.acquire();
mNotifyMgr.notify(mNotificationId, mBuilder.build());
screenOn.release();
質問:説明されているケースでデバイスをウェイクアップするための非推奨ではない信頼できる方法はありますか?
[〜#〜] edit [〜#〜]デバイスをウェイクアップするための回避策を求めていません。私の質問は非推奨のAPIを使用せずに(Activity
を実行せずに)バックグラウンドからデバイスをウェイクアップできるかどうかです
質問から取得したコードを使用して、アクティビティを終了するだけで、ユーザーが通常の時間画面をオンのままにしておく必要があります。この問題に良い週を過ごした後、これが唯一の方法であると私を信じてください。 notitlebarを使用して、アクティビティをいつでも透過に設定できます。ユーザーにはわかりません。
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().addFlags(
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD |
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON |
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);
finish();
}