PackageManager.queryIntentActivities()返回不完整的列表?

时间:2012-05-01 20:58:23

标签: android android-package-managers

我正在Android中编写一个启动器,这是我一直试图修复一段时间而没有运气的问题。

我有以下代码来查询在我的启动器的最开始运行的所有活动,比如onResume()

final Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
final List<ResolveInfo> infos = packageManager.queryIntentActivities(mainIntent, 0);
for (final ResolveInfo info : infos) {
    // create my own recrord for each activity      
}

问题在于,如果我将启动器设置为默认设置并reboot设备,则每次只能按上述代码获取完整列表的一部分。似乎一些大型的脂肪活动(例如缠绕骑士)总是缺失。但是,第二次运行上面的代码将返回完整列表。有人知道为什么吗?我的猜测是,PackageManager需要一些时间来解析胖活动,如果过早调用queryIntentActivities(),它只返回一个部分列表,是真的吗?

但是为什么默认启动器没有这个问题?

1 个答案:

答案 0 :(得分:3)

更大的活动更可能安装在外部存储分区上,这通常需要一段时间才能安装。我的三星Galaxy W手机上的启动器正是如此,呈现了一个占位符图标,直到安装了SD卡并且应用程序可以使用。

应该有一个来自PackageManager的广播告诉你什么时候有新的应用程序可用,但我一眼就找不到。您可能必须听ACTION_MEDIA_MOUNTED并希望PackageManager首先到达那里。