我的应用程序的清单文件中注册了一个接收器,其行为为BOOT_COMPLETED。 我的应用程序中有第三方库,当它收到BOOT_COMPLETED操作时,它会启动一个服务。由于Android Oreo中存在后台执行限制,因此崩溃。
现在,我想仅针对Android O设备禁用此接收器。有没有办法做到这一点?也许就像@TargetApi但在Android Manifest中?
我忘记写道我无法更改库类,它是一个外部jar文件。
答案 0 :(得分:0)
由于图书馆的代码不在您的控制之下,任何方法都无法运作。您应该要求图书馆提供商遵守最新的操作系统。
您可以尝试以下方法:
在您的应用中以高优先级注册BOOT_COMPLETED
,如下所示:
<action android:name="android.intent.action.BOOT_COMPLETED" android:priority="999"/>
立即启动前台服务
可能允许您的图书馆启动后台服务。
或者,如果您可以访问库的BootReceiver类,则可以按如下方式禁用它:
PackageManager pm = getPackageManager();
ComponentName compName =
new ComponentName(getApplicationContext(),
<library_broadcastreceiver>.class);
pm.setComponentEnabledSetting(
compName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
答案 1 :(得分:0)
现在回答答案为时已晚,但也许会对某人有所帮助。
我找到了不同的解决方案,例如可以在接受的答案中将接收方注册到清单中,但是可以代替priority
来指定tools:node="remove"
,并且此属性将从结果清单中删除。另外,我认为可以为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>