如何从PackageManager中的People / Contacts应用程序获取ActivityInfo?

时间:2011-08-31 10:50:10

标签: android package-managers

我的应用程序的一部分是启动器,用户可以在网格中添加(或删除)应用程序。 我用来获取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;

这允许我提取所有其他活动的活动图标和标签并将其显示在网格中,但对于系统联系人或人员应用程序,提取的图标是默认系统图标,标签为“ Android系统“。

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

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

1 个答案:

答案 0 :(得分: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);
    }
}