Android 8.0(Oreo)引入了新的电池使用优化,包括隐式BroadCast。我们有主应用程序和额外安装的插件(apks)。主应用发送带有操作“ POLL_PLUGINS”的自定义广播,以确定已安装的广播并与其共享授权数据。问题是无法在Android 8.0的插件中接收广播。这是发送BroadCast的代码:
Intent intent=new Intent();
intent.setAction("<PACKAGE_NAME>.POLL_PLUGINS");
intent.putExtra ("auth", "<ENCRYPTED_DATA>"));
intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
context.sendBroadcast(intent);
以及插件的mainfest接收器:
<receiver
android:name=".PluginReceiver"
android:enabled="true"
android:exported="true">
<intent-filter android:priority="100000000">
<action android:name="<PACKAGE_NAME>.POLL_PLUGINS"/>
<action android:name="<PACKAGE_NAME>.plugin1.START"/>
</intent-filter>
</receiver>
插件的接收者:
public class PluginReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Log.d ("Plugin/Receiver","Plugin1 received data"); //<-- not being executed at all
MainConn.parseBroadCastIntent (context,intent,R.mipmap.ico_crm, MainActivity.class);
}
}
在以前的Android上效果很好。如何使用相同的方案或其他解决方法?
答案 0 :(得分:0)
注意:如果您的应用程序的目标是API级别26或更高级别,则您不能使用清单为隐式广播(不专门针对您的应用程序的广播)声明接收方,但一些不受该限制的隐式广播除外。在大多数情况下,您可以改用预定作业。
有关更多详细信息,请参见details