Andriod PackageManager使用

1.获取系统应用程序列表
Android系统提供了很多服务管理类,包括ActivityManager,PowerManager,AudioManager,PackageManager

PackageManager的功能:
.安装,卸载应用
.查询Permission相关信息
.查询Aplication相关信息(application,activity,receiver,service,provider及相应属性等)
.查询已经安装的应用
.清除用户数据,缓存,代码段等
.显示系统安装的应用程序列表或者系统程序列表

相关类的介绍:
PackageItemInfo
说明:androidManifest.xml文件中所有节点的基类。提供了这些节点的基本信息:label,icon,meta -data,他并不是直接使用的,而是由子类继承然后调用相应的方法

常用字段:
public int icon:获取该资源图片在R文件的值(对应于android:icon属性)
public int label:获取该label对应R文件的值(对应于android:label属性)
public String name:获取该节点的name(对应于android:name属性)
public String packagename:获取该应用程序包名(对应于android:packageName属性)

常用方法:
Drawabel loadIcon(PackaManager pm):获取当前应用程序的图像
CharSequence loadLabel(PackageManager pm):获取当前应用程序的label

2.ActivityInfo类:
继承自PackageItemInfo
说明:获取应用程序中<activity/>获取<receiver/>节点信息
我们可以通过它来获取我们设置的任何属性,包括:theme,launchMode等
常用的方法继承至PackageIntemInfo类中的loadIcon()和loadLabel()

3.ServiceInfo类
说明:同ActivityInfo类似,同样的继承自PackageItemInfo,只不过它表示是<service>节点信息

4.ApplicationInfo类:
继承自PackageItemInfo
说明:获取一个特定应用程序中<application>节点的
字段说明:
flags字段:FLAG_SYSTEM 系统应用程序
FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中
常用的方法继承至:packageItemInfo类中的LoadIcon()和loadLabel()

5.ResolveInfo类:
说明:根据<Intent>节点来获取上一层目录的信息,通常是<activity>,<receiver>,<service>节点信息。
常用字段:
public ActivityInfo activiInfo获取activityInfo对象,即<activity>或<receiver>节点信息
public ServiceInfo  serviceInfo 获取ServiceInfo对象,即<activity>节点信息

常用方法:
Drawabel loadIcon(PackaManager pm):获取当前应用程序的图像
CharSequence loadLabel(PackageManager pm):获取当前应用程序的label

6.PackageInfo类
说明:获取AndroidManifest.xml字段信息
常用字段信息:
public String packageName
public ActivityInfo[]activities
public ApplicationInfo applicationInfo
public ActivityInfo[]receiver
public ServiceInfo[]services

7.PackageManager
说明:获取系统安装的程序
可以通过:getPackageManager() 方法获取
常用的方法:
public abstract PackageManager getPackageManager()
public abstract Drawable getApplicationIcon(String packageName)
public abstract  ApplicationInfo getApplicationInfo(String packageName,int flags)
public abstract List<ApplicationInfo>getInstalledApplication(int flags)
方法说明:flags一般是进行过滤使用的,flages一般:GET_UNINSTALLED_PACKAGE,那么返回所以的ApplicationInfo.我们可以通过ApplicationInfo的flags过滤,得到我们需要的
public abstract List<PackageInfo>getInstalledPackage(int flags)

public abstract ResolveInfo resolverActivity(Intent intent,int flags)
参数:Intent查询条件,Activity所配置的action和category flags:MATCH_DEFAULT_ONLY,category:必须带有CATEGORY_DEFAULT的Activity,才匹配GET_INTENT_FILTER:匹配Intent条件即可,GET_RESOLVED_FILTER:匹配Intent条件即可
功能:返回给定条件的ResolverInfo对象(本质上是Activity)

public abstract List<ResolveInfo>queryIntentActivities(Intent intent,int flags)
功能:返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象

public abstract ResolveInfo resolveService(Intent intent,int flags)
功能:返回给定条件的ResolveInfo对象(本质上是Service)

public abstract List<ResolveInfo>queryIntentServices(Intent intent,int flags)
功能:返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象

 

 List<PackageInfo> packs = pm.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
        Intent intent=new Intent();
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
       
        List<ResolveInfo>resolveInfos=(List<ResolveInfo>) pm.queryIntentActivities(intent, PackageManager.GET_UNINSTALLED_PACKAGES);
        for(ResolveInfo info:resolveInfos){
         HashMap<String, Object> map = new HashMap<String, Object>(); 
         map.put(“icon”,info.loadIcon(pm));
         map.put(“appName”,info.loadLabel(pm));
         map.put(“packageName”,info.activityInfo.packageName);
         items.add(map);
        }
 

    原文作者:pugongying1988
    原文地址: https://blog.csdn.net/pugongying1988/article/details/7910873
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞