PackageInfo ApplicationInfo与ActivityInfo
PackageManger
常用方法:
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<ResolveInfo> queryIntentServices(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()