以下代码返回一个空列表,而运行它的应用程序注册了这个特定的意图!?
pm.queryBroadcastReceivers(new Intent(Intent.PACKAGE_REPLACED), PackageManager.GET_INTENT_FILTERS | PackageManager.GET_DISABLED_COMPONENTS);
有没有办法为这种意图和其他类似意图检索所有接收者?
这种方法看起来很不可靠还是我做错了什么?
谢谢。
以下代码返回一个空列表,而运行它的应用程序注册了这个特定的意图!?
pm.queryBroadcastReceivers(new Intent(Intent.PACKAGE_REPLACED), PackageManager.GET_INTENT_FILTERS | PackageManager.GET_DISABLED_COMPONENTS);
有没有办法为这种意图和其他类似意图检索所有接收者?
这种方法看起来很不可靠还是我做错了什么?
谢谢。
经过大量研究,只有这里的源代码提供了一些见解:
当仅在意图中指定一个动作时,API 将过滤所有接受此类动作的接收者,而无需任何数据类型或方案。
事实证明,许多动作意图需要一个方案或数据类型,例如任何 PACKAGE_* 动作上的“包”方案。
所以意图需要指定“包”方案。
可以获取信息使用代码,例如
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);
}