我有一个用于下载的模块,一旦下载文件,我就会发送一个隐式的brodcast。 在我的app模块中,我让广播接收器在下载完成后进行一些更改设置。 在android 8中我无法接收这个广播,检查文档,据说使用显式意图新的Intent(context,MyBroadcastReceiver.class); 但我的问题是我的MyBroadcastReceiver.class在我的app模块中而不在我的下载模块中,所以我不能做这样的事情。
还有什么其他可能性?我坚持这个新的广播实施......
答案 0 :(得分:1)
首先,如果你真的是指"模块" - 并且所有这些代码都在一个应用程序和一个进程中 - 请停止使用系统广播。使用进程内解决方案:
LocalBroadcastManager
,正如Balu建议的LiveData
使用系统广播具有隐私,安全和性能方面的影响。
但是,让我们假装通过" module"你的意思是" app",或者代码将在不同的进程中,因此进程内的解决方案将不起作用。
但我的问题是我的MyBroadcastReceiver.class在我的app模块中而不在我的下载模块中,所以我不能做这样的事情。
如果接收者已在清单中注册,您当然可以使用PackageManager
和queryBroadcastReceivers()
来获取接收者的详细信息。然后,您可以在setComponentName()
上拨打Intent
以使其明确,然后再发送广播:
private static void sendImplicitBroadcast(Context ctxt, Intent i) {
PackageManager pm=ctxt.getPackageManager();
List<ResolveInfo> matches=pm.queryBroadcastReceivers(i, 0);
for (ResolveInfo resolveInfo : matches) {
Intent explicit=new Intent(i);
ComponentName cn=
new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName,
resolveInfo.activityInfo.name);
explicit.setComponent(cn);
ctxt.sendBroadcast(explicit);
}
}
答案 1 :(得分:0)