web-dev-qa-db-ja.com

デバイスをウェイクアップするための適切な、非推奨ではない方法は何ですか?

私の要件は次のとおりです。 [〜#〜] 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を実行せずに)バックグラウンドからデバイスをウェイクアップできるかどうかです

17
Droidman

質問から取得したコードを使用して、アクティビティを終了するだけで、ユーザーが通常の時間画面をオンのままにしておく必要があります。この問題に良い週を過ごした後、これが唯一の方法であると私を信じてください。 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();
}
13
RuAware