0

プッシュ通知をリッスンしてアクティビティを作成するサービスがあります。デバイスの画面がオフの場合を除いて、すべてが正常に機能します。望ましい動作は、通知によって画面がロック状態のホーム画面に復帰し、通知が表示されることです。

この動作は、次の方法でのみ作成できます。

mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK |
                           PowerManager.ACQUIRE_CAUSES_WAKEUP |
                           PowerManager.ON_AFTER_RELEASE,
                           WAKELOCK_KEY);

ただし、Android はFULL_WAKE_LOCKFLAG_KEEP_SCREEN_ON を支持して非推奨になっているようです。ただし、バックグラウンド サービスから呼び出されるアクティビティでこれを試しました。

getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON |
                     WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

私のログは、このアクティビティが作成されていることを示していますが、画面にはまだこのアクティビティが表示されません。電源ボタンを押すと、ディスプレイにアクティビティが表示され、作成されたことがすぐに証明されます。以下は、私が試したことのいくつかの要約です。

  1. FULL_WAKE_LOCK (機能しますが非推奨です)
  2. WindowManager - FLAG_TURN_SCREEN_ON、FLAG_KEEP_SCREEN_ON (動作しません)
  3. Google WakefulBroadCastReceiver (動作しません)

に代わるものはありますFULL_WAKE_LOCKか?

4

2 に答える 2

-1

onCreate メソッドで Android 時計が行うことは次のとおりです。

    final Window win = getWindow();
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
            | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
    // Turn on the screen unless we are being launched from the AlarmAlert
    // subclass as a result of the screen turning off.
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
            | WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);

フラグの最初のセットを使用していますか?

編集:私はそれをテストしたところ、動作します。

于 2014-09-14T14:20:33.367 に答える