BroadcastReceiver with acton SCREEN_ON 在后台

BroadcastReceiver with acton SCREEN_ON in background

我想在设备屏幕打开时收听并更新小部件,但是 BroadcastReceiver 在我关闭我的应用程序时不起作用。它仅在应用程序为 运行.

时有效

AndroidManifest.xml:

    <receiver
        android:name=".WidgetProvider"
        android:exported="true">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>
            <action android:name="android.intent.action.SCREEN_ON"/>
            <action android:name="android.intent.action.SCREEN_OFF"/>
        </intent-filter>
        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/widget_info"/>
    </receiver>

代码在onCreate():

    IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new WidgetProvider();
    registerReceiver(mReceiver, intentFilter);

自 Android8 起,出于安全和电池消耗的考虑,后台进程已被限制。一些广播接收器,如:-

  1. SCREEN_OFF
  2. TIME_TICK
  3. 等..

已经 blocked.But,其中一些是这样的:

  1. 重启

工作正常。这是为了节省电池消耗。这也可以防止我们的应用程序在不需要时打开活动。