关于PackageInfo、ApplicationInfo、ActivityInfo、ResolveInfo四种信息类的区别之我见

PackageInfo:

获得方法:

PackageManager packageManager = context.getPackageManager();//返回packagemanager实例来找到全球包装信息(来自百度翻译)
		List allPackageInfos = packageManager
				.getInstalledPackages(packageManager.GET_UNINSTALLED_PACKAGES
						| 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.getPackageInfo(packageName,PackageManager.GET_PERMISSIONS).requestedPermissions


ApplicationInfo:

获得方法:

List sysPackageInfos = new ArrayList();// 定义系统安装软件信息包
		for (PackageInfo packageInfo : allPackageInfos)// 循环取出所有软件信息
		{
			ApplicationInfo applicationInfo = packageInfo.applicationInfo;// 得到每个软件信息
			
		}

 特点: 
  

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

ResolveInfo:

获得方法:

Intent startIntent = new Intent(Intent.ACTION_MAIN, null);//为本startIntent设置行为为ACTION_MAIN
		startIntent.addCategory(Intent.CATEGORY_LAUNCHER);//为本startIntent设置启动方式为LAUNCHER
		startIntent.setPackage(packageInfo.getPkgName());//为本startIntent设置包名为packageInfo.getPkgName()
		//以startIntent为查询条件查询出需要启动的App的信息
		//功能 :返回给定条件的所有ResolveInfo对象(本质上是Activity),集合对象
		List startInfoList = SoftManagementActivity.this
				.getPackageManager().queryIntentActivities(startIntent, 0);
		//如果startInfoList的长度小于1,则返回
		if (startInfoList.size() < 1)
		{
			return;
		}
		//startInfoList中一般第一条就是启程App的信息
		ResolveInfo startInfo = startInfoList.iterator().next();
		
特点:

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 activityInfo = startInfo.activityInfo;

 特点: 
  

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





你可能感兴趣的:(android学习笔记)