Android PackageManager 详解

 
PackageManager是用于获取Android系统中应用程序的信息,查询Application相关信息(application,activity,receiver,service,provider及相应属性等)、查询已安装应用、增加或删除permission、清除用户数据、缓存,代码段等。

AnroidManifest.xml文件节点说明:

120202110234911.gif 

AndroidManifest.xml文件中所有节点的基类,提供了这些节点的基本信息:a label、icon、meta-data。它并不直接使用,而是由子类继承然后调用相应方法。


PackageItemInfo类:

Field Detail
public int icon 获得该资源图片在R文件中的值 (对应于android:icon属性)
public int labelRes 获得该label在R文件中的值(对应于android:label属性)
public String name 获得该节点的name值 (对应于android:name属性)
public String packagename 获得该应用程序的包名 (对应于android:packagename属性)

Method Detail
Drawable loadIcon(PackageManager pm) 获得当前应用程序的图像
CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label

ActivityInfo/ServiceInfo extends PackageItemInfo

获得应用程序中或者节点的信息。我们可以通过它来获取我们设置的任何属性,包括theme 、launchMode、launchmode等。常用方法继承至PackageInfo类中的loadIcon()和loadLabel();


ApplicationInfo extends PackageItemInfo

获取一个特定应用程序中节点的信息
FLAG_SYSTEM
-->系统应用程序
FLAG_EXTERNAL_STORAGE
-->表示该应用安装在sdcard中
常用方法继承至PackageItemInfo类中的loadIcon()和loadLabel();

ResolveInfo 


根据节点来获取其上一层目录的信息,通常是、、节点信息。
public ActivityInfo activityInfo 
获取 ActivityInfo对象,即或节点信息
public ServiceInfo serviceInfo 
获取 ServiceInfo对象,即节点信息

Drawable loadIcon(PackageManager pm) 
获得当前应用程序的图像
CharSequence loadLabel(PackageManager pm) 获得当前应用程序的label


PackageInfo

Field Detail
public String packageName 应用程序包名
public ActivityInfo[] activities 所有节点信息
public ApplicationInfo applicationInfo 节点信息,only one
public ActivityInfo[] receivers 所有节点信息,many
public ServiceInfo[] services 所有节点信息 ,many

PackageManager 

获得已安装的应用程序信息 。可以通过context.getPackageManager()方法获得。

Method Detail
public Drawable getApplicationIcon(String packageName) 根据PackageName获取应用程序Icon,有重载方法
public ApplicationInfo getApplicationInfo(String packageName, int flags) 根据PackageName获取ApplicationInfo,flags:该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可
public List getInstalledApplications(int flags) flag为一般为PackageManager.GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo的flags过滤,得到我们需要的
public ResolveInfo resolveActivity(Intent intent, int flags) intent 查询条件,Activity所配置的action和category
flags:MATCH_DEFAULT_ONLY:Category必须带有CATEGORY_DEFAULT的Activity;GET_INTENT_FILTERS:匹配Intent条件即可;GET_RESOLVED_FILTER:匹配Intent条件即可;(本质上是Activity).
public ResolveInfo resolveService(Intent intent, int flags) 参数同上,返回给定条件的ResolveInfo对象(本质上是Service)
public List queryIntentActivities(Intent intent, int flags) 参数同上,返回给定条件的所有ResolveInfo对象(本质上是Activity)集合对象
public List queryIntentServices(Intent intent, int flags) 参数同上,返回给定条件的所有ResolveInfo对象(本质上是Service)集合对象
Drawable getActivityIcon(ComponentName cn) 获取组件名称对应的Activity的Icon
Drawable getActivityIcon(Intent intent) 获取Intent对应的Icon
XMLResourceParse getXml(String packageName,int resid,ApplicationInfo ai) 从指定的包中加载某个xml文件

PackageManager还可以获取安装包的大小信息,包括缓存大小(cachesize)、数据大小(datasize)、应用程序大小(codesize)
关于安装包得大小信息封装在
PackageStats类中

Field Detail
public long cachesize 缓存大小
public long codesize 应用程序大小
public long datasize 数据大小
public String packageName 应用包名

应用程序总大小=cachesize + codesize + datasize


// 列出普通应用程序
private void loadApps() {
customApps = new ArrayList(); // 普通应用程序列表
systemApps = new ArrayList(); // 系统应用程序列表
// 得到PackageManager对象
PackageManager pm = this.getPackageManager();
// 得到系统安装的所有程序包的PackageInfo对象
List packages = pm.getInstalledPackages(0);
for (PackageInfo pi : packages) {
// 列出普通应用
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
customApps.add(pi);
}
// 列出系统应用,总是感觉这里设计的有问题,希望高手指点
if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
systemApps.add(pi);
}
}
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值