PackageManager 管理应用程序信息

PackageManager 管理应用程序信息

 AnroidManifest.xml文件节点说明:PackageManager 管理应用程序信息_第1张图片

 AndroidManifest.xml文件中所有节点的基类,PackageInfo 对象可以获得配置文件中AnroidManifest的所有信息,

由上图可以看出,activity,service,receiver等组件都是application的子节点,而application的父节点是PackgeInfo,同时权限配置信息也是PackageInfo的子节点,所以只要得到PackageInfo的对象,就能得到一个应用的具体信息。

初始化包管理器 PackageManager

// **获得包管理器,在android下PackageManager相当windows下的程序管理器
PackageManager pm = getPackageManager();


实例化PackageInfo对象,可以获得包信息,应用版本号,应用首次安装时间,应用涉及权限等信息

// 初始化PackageInfo
PackageInfo packageInfo = pm.getPackageInfo(getPackageName(),PackageManager.GET_UNINSTALLED_PACKAGES);

// 获得应用程序版本号
int versionCode = packageInfo.versionCode;
String versionName = packageInfo.versionName;

// 获得应用程序首次安装时间,但经过亲自测试,该值存在误差,不够精确
long installTime = packageInfo.firstInstallTime;

// 获得该应用涉及的权限信息
PermissionInfo[] permissions = packageInfo.permissions;
for (PermissionInfo permissionInfo : permissions) {
	Log.i("permissionInfo", permissionInfo.name);
}

PackageInfo 对象可以获得配置文件中 AnroidManifest的所有信息,如下图,具体代码在此就不一一列举出来了
PackageManager 管理应用程序信息_第2张图片


实例化ApplicationInfo对象,这个对象里面有获取应用程序图标,名称,包等方法.

// **获得包管理器,在android下PackageManager相当windows下的程序管理器
		PackageManager pm = getPackageManager();

		// 声明ApplicationInfo对象
		ApplicationInfo appInfo = null;
		try {
			// 实例化:PackageManager通过包名获得ApplicationInfo实例
			appInfo = pm.getApplicationInfo(getPackageName(),
					PackageManager.GET_UNINSTALLED_PACKAGES);
		} catch (NameNotFoundException e) {
			e.printStackTrace();
		}
// 获得PackageInfo对象的属性applicationInfo 获得子节点 application对象
ApplicationInfo info = packageInfo.applicationInfo;
Drawable app_ico = info.loadIcon(pm);

// 获得应用程序的名称(如:360手机卫士)
String app_name = info.loadLabel(pm).toString();

// 得到应用程序包名 (如:com.safe.guard)
String packageName = info.packageName;

// PackageInfo的子节点Activity:得到所有Activity的信息
ActivityInfo[] activities = packageInfo.activities;


判断一个应用是否是系统应用

public boolean filterApp(ApplicationInfo info) {
	// android系统应用,用户手动升级
	if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
		return true;
		// 用户自己安装的应用程序
	} else if ((info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
		return true;
	}
	return false;
}



参考文章: http://www.linuxidc.com/Linux/2012-02/53072.htm

你可能感兴趣的:(Android开发,包管理器,packagemanager,Android配置)