带有PACKAGE_REPLACED的queryBroadcastReceivers

时间:2013-03-12 04:46:05

标签: android android-intent

以下代码返回一个空列表,而运行它的应用程序已注册此特定意图!?

pm.queryBroadcastReceivers(new Intent(Intent.PACKAGE_REPLACED), PackageManager.GET_INTENT_FILTERS | PackageManager.GET_DISABLED_COMPONENTS);

有没有办法检索此类意图的所有接收器和其他类似的接收器?

这种方法似乎非常不可靠,或者我做错了什么?

感谢。

2 个答案:

答案 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);
}