为 Oreo 禁用 BroadcastReceiver?

Disabling BroadcastReceiver for Oreo?

我在我的应用程序的清单文件中注册了一个接收器,其操作为 BOOT_COMPLETED。 我的应用程序中有一个第三方库,当它收到 BOOT_COMPLETED 操作时,它会启动一个服务。由于 Android Oreo 中存在后台执行限制,因此它崩溃了。

现在,我只想为 Android O 台设备禁用此接收器。有没有办法做到这一点?也许就像@TargetApi 但在 Android Manifest?

我忘了写我不能更改库 class,它是一个外部 jar 文件。

由于库的代码不在您的控制范围内,任何方法都行不通。您应该要求图书馆提供者遵守最新的 OS.

您可以尝试以下解决方法:

  • 在您的应用中以高优先级注册BOOT_COMPLETED,如下所示:

    <action android:name="android.intent.action.BOOT_COMPLETED" android:priority="999"/>

  • 立即启动前台服务

可能允许您的图书馆启动后台服务。

或者,如果您有权访问库的 BootReceiver class,您可以按如下方式禁用它:

PackageManager pm = getPackageManager();
ComponentName compName = 
      new ComponentName(getApplicationContext(), 
            <library_broadcastreceiver>.class);
pm.setComponentEnabledSetting(
      compName,
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP);

现在回答为时已晚,但也许它会对某人有所帮助。 我找到了不同的解决方案,就像在接受的答案中一样,您可以在清单中注册接收器,但是您可以指定 tools:node="remove" 而不是 priority 并且此属性将从结果清单中删除。另外我认为可以为 Android O.

创建单独的清单
<receiver android:name="com.package.app.SomeReceiver">
     <intent-filter>
           <action android:name="android.intent.action.BOOT_COMPLETED"  tools:node="remove"/>
     </intent-filter>
</receiver>