PackageInfo ApplicationInfo与ActivityInfo

PackageManger 

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

常用方法

public abstract PackageManager  getPackageManager()   

功能:获得一个PackageManger对象

public abstract Drawable    getApplicationIcon(StringpackageName)

参数: packageName 包名

功能:返回给定包名的图标,否则返回null

public abstract ApplicationInfo   getApplicationInfo(String packageName, int flags)

参数:packagename 包名 flags 该ApplicationInfo是此flags标记,通常可以直接赋予常数0即可

功能:返回该ApplicationInfo对象

public abstract List<ApplicationInfo>  getInstalledApplications(int flags)

参数:flag为一般为GET_UNINSTALLED_PACKAGES,那么此时会返回所有ApplicationInfo。我们可以对ApplicationInfo 的flags过滤,得到我们需要的。

功能:返回给定条件的所有PackageInfo

 public abstract List<PackageInfo>  getInstalledPackages(int flags) 

参数如上

功能:返回给定条件的所有PackageInfo

public abstract 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条件即可

功能 :返回给定条件的ResolveInfo对象(本质上是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<ResolveInfoqueryIntentServices(Intent intent, int flags)

参数同上

功能 :返回给定条件的所有ResolveInfo对象(本质上是Service),集合对象


PackageInfo:

获得方法:

PackageManager  packageManager = getPackageManager();
PackageInfo packageInfo  =  packageManager.getPackageInfo(getPackageName(),PackageManager.GET_ACTIVITIES);

特点:

常用字段:
           public String    packageName                   包名
           public ActivityInfo[]     activities                   所有节点信息
           public ApplicationInfo applicationInfo       节点信息,只有一个
           public ActivityInfo[]    receivers                  所有节点信息,多个
           public ServiceInfo[]    services                  所有节点信息 ,多个

通过 PackageInfo  获取具体信息方法:
包名获取方法:packageInfo.packageName
icon获取获取方法:packageManager.getApplicationIcon(applicationInfo)
应用名称获取方法:packageManager.getApplicationLabel(applicationInfo)
使用权限获取方法:

PackageManager  packageManager = getPackageManager();
String[] requestedPermissions = packageManager.getPackageInfo(getPackageName(),PackageManager.GET_PERMISSIONS).requestedPermissions;

ApplicationInfo:

获得方法:

PackageManager  packageManager = getPackageManager();
ApplicationInfo applicationInfo = packageManager.getApplicationInfo(getPackageName(),PackageManager.GET_META_DATA);

List<PackageInfo> allPackageInfos = packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES);
// 定义系统安装软件信息包 
for (PackageInfo pInfo : allPackageInfos){ // 循环取出所有软件信息 
       ApplicationInfo appInfo = pInfo.applicationInfo;// 得到每个软件信息
       Log.e("===========>",appInfo.packageName);
}

特点:

ApplicationInfo是从一个特定的应用得到的信息。这些信息是从相对应的Androdimanifest.xml的< application>标签中收集到的。
ApplicationInfo类 继承自  PackageItemInfo
         说明:获取一个特定引用程序中节点的信息。
         字段说明:
      flags字段:   FLAG_SYSTEM 系统应用程序
                   FLAG_EXTERNAL_STORAGE 表示该应用安装在sdcard中
         常用方法继承至PackageItemInfo类中的loadIcon()和loadLabel()

ResolveInfo

获得方法:


// 获得所有启动Activity的信息,类似于Launch界面
public void queryAppInfo() { PackageManager pm = this.getPackageManager(); // 获得PackageManager对象 Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); // 通过查询,获得所有ResolveInfo对象. List<ResolveInfo> resolveInfos = pm.queryIntentActivities(mainIntent, PackageManager.MATCH_DEFAULT_ONLY); // 调用系统排序 , 根据name排序 // 该排序很重要,否则只能显示系统应用,而不能列出第三方应用程序 Collections.sort(resolveInfos,new ResolveInfo.DisplayNameComparator(pm)); for (ResolveInfo reInfo : resolveInfos) { String activityName = reInfo.activityInfo.name; // 获得该应用程序的启动Activity的name String pkgName = reInfo.activityInfo.packageName; // 获得应用程序的包名 String appLabel = (String) reInfo.loadLabel(pm); // 获得应用程序的Label Drawable icon = reInfo.loadIcon(pm); // 获得应用程序图标 // 为应用程序的启动Activity 准备Intent Intent launchIntent = new Intent(); launchIntent.setComponent(new ComponentName(pkgName, activityName)); Log.e("===========>",appLabel + " activityName---" + activityName + " pkgName---" + pkgName); } }
特点:

ResolveInfo这个类是通过解析一个与IntentFilter相对应的intent得到的信息。它部分地对应于从AndroidManifest.xml的< intent>标签收集到的信息。

ResolveInfo类
        说明:根据节点来获取其上一层目录的信息,通常是、、节点信息。
       常用字段:
             public  ActivityInfo  activityInfo     获取 ActivityInfo对象,即或节点信息
             public ServiceInfo   serviceInfo     获取 ServiceInfo对象,即节点信息
       常用方法: 
             Drawable loadIcon(PackageManager pm)             获得当前应用程序的图像
             CharSequence loadLabel(PackageManager pm)  获得当前应用程序的label

通过
ResolveInfo 获取具体信息方法:
包名获取方法:resolve.activityInfo.packageName
icon获取获取方法:resolve.loadIcon(packageManager)
应用名称获取方法:resolve.loadLabel(packageManager).toString()

ActivityInfo

获得方法:

ActivityInfo[] actInfo = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_ACTIVITIES).activities;
ActivityInfo actInfo2 = getPackageManager().getActivityInfo(getComponentName(),PackageManager.GET_META_DATA);

特点:

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

ActivityInfo、ApplicationInfo、PackageInfo关系图:

参考:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值