32

アプリの起動後、ブロードキャストレシーバーを常に実行し続ける必要があります。

このレシーバーをアプリケーションに登録するコードは次のとおりです。

    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new ScreenEventsReceiver();
    registerReceiver(mReceiver, filter);

そして受信機のコード

public class ScreenEventsReceiver extends BroadcastReceiver {
     public static boolean wasScreenOn = true;

     @Override
     public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            wasScreenOn = false;
            Log.d("ScreenEventReceiver", "ON");
        } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
            wasScreenOn = true;
            Log.d("ScreenEventReceiver", "ON");
        }
     }
}
4

7 に答える 7

2

マニフェストで宣言されたコンポーネントを介して一部のブロードキャスト イベントを受信できません。

これらのイベントは

  • ACTION_BATTERY_CHANGED
  • ACTION_CONFIGURATION_CHANGED
  • ACTION_SCREEN_OFF (このイベントで遊んでいます)
  • ACTION_SCREEN_ON (このイベントで遊んでいます)
  • ACTION_TIME_TICK

参照https://developer.android.com/reference/android/content/Intent.html#ACTION_SCREEN_ON

したがって、特定のイベントでは、サービスを作成する必要があり、サービス onCreate() で Context.registerReceiver() を使用してイベントを明示的に登録する必要があります。

その他のイベントについては、マニフェストに記載するだけで十分です。

于 2018-02-03T10:54:42.360 に答える
2

マニフェストで宣言するBroadcastReceiverと、アプリケーションが閉じられたり停止されたりしても常にアクティブになり、呼び出されます

于 2014-01-27T22:38:33.713 に答える