以下代码返回一个空列表,而运行它的应用程序已注册此特定意图!?
pm.queryBroadcastReceivers(new Intent(Intent.PACKAGE_REPLACED), PackageManager.GET_INTENT_FILTERS | PackageManager.GET_DISABLED_COMPONENTS);
有没有办法检索此类意图的所有接收器和其他类似的接收器?
这种方法似乎非常不可靠,或者我做错了什么?
感谢。
答案 0 :(得分:2)
经过大量研究,只有source code here提供了一些有关此问题的见解:
当只在intent中指定一个动作时,API将过滤掉所有接受此类动作而没有任何数据类型或方案的接收者。
结果需要一个方案或数据类型的许多操作意图,例如任何PACKAGE_ *操作的'package'方案。
因此意图需要指定“包”方案。
答案 1 :(得分:0)
可以获取信息使用代码,如
List<String> startupApps = new ArrayList<String>();
Intent intent = new Intent(Intent.ACTION_PACKAGE_ADDED);
Uri uriInfo = Uri.parse("package://");
intent.setData(uriInfo);
final List<ResolveInfo> activities = packageManager
.queryBroadcastReceivers(intent, 0);
for (ResolveInfo resolveInfo : activities) {
ActivityInfo activityInfo = resolveInfo.activityInfo;
if (activityInfo != null)
startupApps.add(activityInfo.name);
}