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