获取所有已经安装app的信息列表
这里要使用PackageManager # queryIntentActivities(筛选条件intent,0),结果是ResolveInfo对象列表
基本使用方法:
Intent intent = new Intent();
intent.设置筛选条件;
List<ResolveInfo> list =
mPackageManager.queryIntentActivities(intent, PackageManager.GET_META_DATA);
如果筛选条件是:intent.setAction(Intent.ACTION_MAIN);//可以自定义action为筛选条件
会把所有带Intent.ACTION_MAIN标签的Activity筛选出来
如果筛选条件是:intent.addCategory(Intent.CATEGORY_LAUNCHER);//不可以自定义category
结果为0,,这是一个无效筛选条件
如果筛选条件是:
intent.setAction(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
搜出来的结果比较正常
如果筛选条件是:没有筛选条件
结果为0,,这是一个无效筛选条件
如果筛选条件是:intent.setPackage(某app包名);
结果为该应用的Activity信息列表
一般不用PackageManager # getInstalledApplications(flag)方法,因为这个方法会把很多杂七杂八的东西都筛选出来,而且搜出来的是ApplicationInfo对象列表,假如一个app有多个入口,就不适用了。
mPackageManager.getInstalledApplications(flag);
换了很多flag,结果都是一样的,都把杂七杂八的东西搜出来了
ApplicationInfo
manifest文件中application标签信息会封装成这个对象,包括包名、app名、图标、权限、描述等信息
ResolveInfo
组件信息封装类,包括四大组件Activity、Service、Broadcast Receiver、Content Provider
常用的有
queryIntentActivities()查询Activity信息对象列表
queryBroadcastReceivers()查询Broadcast Receiver信息对象列表
get**组件()查询单个组件信息对象
(查一个用get**,查列表用query**)
ResolveInfo常用属性介绍
应用名:resolveInfo.loadLabel(mPackageManager)
包名:resolveInfo.activityInfo.packageName //resolveInfo.resolvePackageName为null
图标:resolveInfo.loadIcon(mPackageManager)
全类名:resolveInfo.activityInfo.name(Activity和Receiver都是用activityInfo)
!!!需要注意的是:在系统user_unlock之前拿到的ResolveInfo中图标为空,之后才正常,如果有需要则要监听user_unlock广播
根据pkg查应用名
mPackageManager.getApplicationLabel(
mPackageManager.getApplicationInfo(pkg, PackageManager.GET_META_DATA))
.toString();
根据pkg查应用入口intent对象
Intent launchIntent = mPackageManager.getLaunchIntentForPackage(pkg);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
本文介绍了如何使用Android的PackageManager获取已安装应用的详细信息,包括应用名称、图标、包名和入口Intent。通过queryIntentActivities()方法获取ResolveInfo列表,避免getInstalledApplications()带来的冗余信息。同时,解析了ApplicationInfo和ResolveInfo类的关键属性,以及如何根据包名查询应用名称和入口Intent。
191

被折叠的 条评论
为什么被折叠?



