Android PackageManager 包管理者

1、简述
Android系统为我们提供了很多服务管理的类,
包括ActivityManager、PowerManager(电源管理)AudioManager(音频管理) 等。

除此之外,还提供了一个PackageManger管理类,它的主要职责是管理应用程序包。 通过它,我们就可以获取应用程序信息。
2、获取PackageManager

PackageManager packageManager = this.getPackageManager();
3、通过PackageManager来获取应用程序对应的 PackageInfo
3.1 、当参数为 0 时 ,也就是为,获取应用的版本信息

 /**
  * 获取手机上所有的安装的应用程序 的安装 包信息
  * 参数 为 过过滤信息标识
  *当参数为 0 时,获取的PackageInfo中只有 versionCode 与versionName 的值
  */
List<PackageInfo> installedPackageList = packageManager.getInstalledPackages(0);
for (PackageInfo packageInfo : installedPackageList) {
      int versionCode = packageInfo.versionCode;
      Log.i("packageInfo-", "versionCode: " + versionCode);
      String versionName = packageInfo.versionName;
      Log.i("packageInfo-", "versionName: " + versionName);
 }
3.2 、当参数为 2 时 ,也就是为PackageManager.GET_ACTIVITIES ,获取应用中的标签下的所有activity标签

 /**
  * 当参数为1时   PackageManager.GET_ACTIVITIES
  * 获取 <application>标签下的所有activity标签
  */
List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_ACTIVITIES);

for (PackageInfo packageInfo : list) {
    // 获取 <application>标签下的所有activity标签
    ActivityInfo[] activities = packageInfo.activities;
    if (activities != null && activities.length != 0) {
          for (int i = 0; i < activities.length; i++) {
             Log.d("packageInfo -activities", "| " + activities[i]);
                }
        }
}
3.3 、当参数为 4 时 ,也就是为PackageManager.GET_SERVICES ,获取应用中的标签下的所有service标签

/**
* 当参数为4时   PackageManager.GET_SERVICES:
* 获取 <application>标签下的所有<service>标签的信息
*/
List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_SERVICES);
for (PackageInfo packageInfo : list) {
        // 获取 <application>标签下的所有services标签
        ServiceInfo[] services = packageInfo.services;
        if (services != null && services.length != 0) {
            for (int i = 0; i < services.length; i++) {
                    Log.i("packageInfo-services", "services:" + i + "=" + services[i]);
            }
        }
 }
3.4 、当参数为 2 时 ,也就是为PackageManager.GET_RECEIVERS ,获取应用中的标签下的所有receive标签


/**
 * 当参数为2时   PackageManager.GET_RECEIVERS:
 * 获取 <application>标签下的所有<receive>标签的信息
 */
List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_RECEIVERS);
        for (PackageInfo packageInfo : list) {
            // 获取 <application>标签下的所有receive标签
            ActivityInfo[] receivers = packageInfo.receivers;
            if (receivers != null && receivers.length != 0) {
                for (int i = 0; i < receivers.length; i++) {
                    Log.i("packageInfo-", "receivers:" + i + "=" + receivers[i]);
                }
            }
}
3.5 、当参数为 4096 时 ,也就是为PackageManager.GET_PERMISSIONS ,获取应用中的标签下的所有permission标签


/**
* 当参数为4096时   PackageManager.GET_PERMISSIONS:
* 获取 <application>标签下的所有<permission>标签的信息
*/
List<PackageInfo> list = packageManager.getInstalledPackages(PackageManager.GET_PERMISSIONS);
for (PackageInfo packageInfo : installedPackageList4) {
        // 获取 <application>标签下的所有requestedPermissions
        String[] requestedPermissions = packageInfo.requestedPermissions;
        if (requestedPermissions != null && requestedPermissions.length != 0) {
            for (int i = 0; i < requestedPermissions.length; i++) {
                 Log.i("packageInfo-", "requestedPermissions:" + i + "=" + requestedPermissions[i]);
            }
        }
}