2

我的应用程序的一部分是启动器,用户可以在其中添加(或删除)网格中的应用程序。我用来获取 ActivityInfo 的代码如下:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setPackage(packageName);
ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);

ActivityInfo aInfo = rInfo.activityInfo;

这允许我提取所有其他活动的 Activity 图标和标签并将它们显示在网格中,但在系统联系人或人员应用程序的情况下,提取的图标是默认系统图标,标签是“Android 系统” .

如何为 People 应用程序提取正确的活动信息?

注意:我提取活动 (resolveActivity()) 而不是应用程序的原因是某些应用程序定义了多个启动器活动,我需要找到所有具有 category=launcher 的活动。

4

1 回答 1

3

我解决了它在代码中添加缩进行:

Intent intent = new Intent();
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setAction(Intent.ACTION_MAIN);
intent.setPackage(packageName);
-->intent.setComponent(new ComponentName(packageName, className)));
ResolveInfo rInfo = getPackageManager().resolveActivity(intent, 0);

ActivityInfo aInfo = rInfo.activityInfo;

我从我得到的可启动活动列表中提取了 packageName 和 className,如下所示:

private List<ActivityInfo> applications = new ArrayList<ActivityInfo>();

for(ApplicationInfo info:getPackageManager().getInstalledApplications(0)){
    Intent intent = new Intent();
    intent.addCategory(Intent.CATEGORY_LAUNCHER);
    intent.setAction(Intent.ACTION_MAIN);
    intent.setPackage(info.packageName);
    List<ResolveInfo> list = getPackageManager().queryIntentActivities(intent, 0);

    for(ResolveInfo rInfo:list){                
        ActivityInfo activity = rInfo.activityInfo;
        applications.add(activity);
    }
}
于 2011-08-31T12:22:54.190 回答