Android,利用PackageManger获取app信息:名称、图标、包名、入口

本文介绍了如何使用Android的PackageManager获取已安装应用的详细信息,包括应用名称、图标、包名和入口Intent。通过queryIntentActivities()方法获取ResolveInfo列表,避免getInstalledApplications()带来的冗余信息。同时,解析了ApplicationInfo和ResolveInfo类的关键属性,以及如何根据包名查询应用名称和入口Intent。

获取所有已经安装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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值