3

我正在用 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()调用得太早,它只会返回一个部分列表,是真的吗?

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

4

1 回答 1

3

较大的活动更有可能安装在外部存储分区上,这通常需要一段时间才能安装。我的三星 Galaxy W 手机上的启动器就是这样做的,它会显示一个占位符图标,直到安装 SD 卡并且应用程序可以使用。

应该有来自 PackageManager 的广播,告诉您何时有新的应用程序可用,但我一目了然找不到。您可能必须听ACTION_MEDIA_MOUNTED并希望 PackageManager 已先到达那里。

于 2012-11-09T11:20:13.207 回答