欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android ApplicationInfo 应用程序信息的详解

程序员文章站 2024-02-11 22:01:52
android applicationinfo 应用程序信息 1、简述 1 applicationinfo是android.content.pm包下的一个实体类...

android applicationinfo 应用程序信息

1、简述

1 applicationinfo是android.content.pm包下的一个实体类,用于封装应用的信息,flags是其中的一个成员变量public int flags = 0;用于保存应用的标志信息。

2 applicationinfo 通过它可以得到一个应用基本信息。
   这些信息是从androidmanifest.xml的< application >标签获取的

3 applicationinfo对象里保存的信息都是<application>标签里的属性值

4 applicationinfo与resolveinfo比较:前者能够得到icon、label、meta-data、description。后者只能得到icon、label


2、获取applicationinfo

2.1 、获取手机上安装所有程序对应的 applicationinfo

/**
* 获取手机上安装的所有的程序对应的 applicationinfo
* 它是通过解析androidmanifest.xml的< application>标签中得到的,所以它能得到所有的app
*
* 获取手机上的所有的安装的应用程序信息
* 参数为 标识  一般为 packagemanager.get_uninstalled_packages
*/
list<applicationinfo> list = packagemanager.getinstalledapplications(packagemanager.get_uninstalled_packages);

2.2 、获取指定包名对应的 applicationinfo

 /**
* 获取指定应用程序 applicationinfo
* 参数一对应应用程序的包名
* 参数二 应用程序对应的标识 通常为 0
*/

      applicationinfo applicationinfo = packagemanager.getapplicationinfo("com.androidlongs.contactsapplication", 0);


3、通过applicationinfo来获取应用程序的 基本信息

3.1 、获取应用程序对应的包名、应用名称

//获取应用图标
drawable drawable = applicationinfo.loadicon(packagemanager);

//获取应用程序的 包名
string apppackagename = applicationinfo.packagename;

//获取应用名
//参数 packagemanager 是应用管理者对象 
string appname =applicationinfo.loadlabel(packagemanager).tostring();

3.2 、获取应用程序对应数据的目录以及占用的空间大小

//获取应用存放数据目录
string dir = applicationinfo.sourcedir;
log.d("app ","应用存放数据目录 " +dir);

 //获取应用数据大小
ong length = new file(dir).length();

//转换为 m
float size = length*1f/1024/1024;
log.d("app ","应用数据大小 " +length+"\t"+size);

3.3 、判断是否安装在外置储存空间存

//判断是否安装在外存
int flags = applicationinfo.flags;
if((flags&applicationinfo.flag_external_storage)==applicationinfo.flag_external_storage){
  log.d("app "," 安装在 外置存储空间 ");
}else {
  log.d("app "," 安装在 内置存储空间 ");
}

3.4 、判断应用程序是否是系统应用

//判断是否是系统应用
if((flags&applicationinfo.flag_system)==applicationinfo.flag_system){
  log.d("app "," 是系统应用 ");
}else{
  log.d("app "," 不是系统应用 ");
}

3.5 、managespaceactivityname

/**
 * 从”android:managespaceactivity“属性得到
 * 用于指定一个activity来管理数据,
 * 它最终会出现在设置->应用程序管理中,
 * 默认为按钮为”清除数据”,指定此属性后,该按钮可点击跳转到该activity, 让用户选择性清除哪些数据。若不设置则为null.
 */
string activityname = applicationinfo.managespaceactivityname;
log.i("applicationinfo", "activityname: " + activityname);

3.6 、获取应用程序运行的进程

/**
 * 从”android:process“属性得到,注明应用运行的进程名。或不设置则默认为应用包名。
 */
string processname = applicationinfo.processname;
log.i("applicationinfo", "processname: " + processname);

3.7 、其他配置信息简述

// 配置文件中的android:backupagent属性值,用于备份
      string backupagentname = applicationinfo.backupagentname;
      log.i("applicationinfo", "backupagentname: " + backupagentname);
      // 获取继承application类的对象,维护全局的application状态
      //但一般都不用继承的方式,可以通过context.getapplicationcontext()方法得到
      string classname = applicationinfo.classname;
      log.i("applicationinfo", "classname: " + classname);




      /**
       * 可选项,访问当前应用所有组件需要声明的权限,从”android:permission“属性得到。
       */
      string permisson = applicationinfo.permission;
      log.i("applicationinfo", "permisson: " + permisson);
      // 创建对象时,传入的是get_shared_library_files该属性才有值
      string[] files = applicationinfo.sharedlibraryfiles;
      log.i("applicationinfo", "files: " + files);
      // 存放数据的路径 应用数据目录。
      string datapath = applicationinfo.datadir;
      log.i("applicationinfo", "datapath: " + datapath);
      // 本地路径 jni本地库存放路径。
      string nativepath = applicationinfo.nativelibrarydir;
      log.i("applicationinfo", "nativepath:" + nativepath);
      // 公共资源路径
      string punlicsourcepath = applicationinfo.publicsourcedir;
      log.i("applicationinfo", "punlicsourcepath: " + punlicsourcepath);
      // 资源路径 应用apk的全路径
      string sourcepath = applicationinfo.sourcedir;
      log.i("applicationinfo", "sourcepath: " + sourcepath);

      /**
       * 当前应用所有activity的默认task密切性。
       * 可以参考activityinfo的taskaffinity,从”android:taskaffinity“属性得到。
       * 具体taskaffinity是怎么影响到activity在task的启动, 后面会在activity启动模式中细讲
       */
      string taskaffinity = applicationinfo.taskaffinity;
      log.i("applicationinfo", "taskaffinity: " + taskaffinity);
      // 如果是false,代表application里的所有组件都禁用
      boolean enable = applicationinfo.enabled;
      log.i("applicationinfo", "enable: " + enable);
      // 表述资源文件的标识
      int descrires = applicationinfo.descriptionres;
      log.i("applicationinfo", "descrires: " + descrires);
      int flag = applicationinfo.flags;
      log.i("applicationinfo", "flag: " + flag);
      // 指定smallest screen width的值,超过这个值,就要开启屏幕兼容
      int compatiblewidth = applicationinfo.compatiblewidthlimitdp;//android:compatiblewidthlimitdp属性
      log.i("applicationinfo", "compatiblewidth: " + compatiblewidth);
      // 同上,只是这时候用户无法禁止屏幕兼容模式,说明是强制启动屏幕兼容
      int largestwidth = applicationinfo.largestwidthlimitdp;//android:largestwidthlimitdp属性
      log.i("applicationinfo", "largestwidth: " + largestwidth);
      // 所需屏幕空间的最短尺寸,
      int samllestwidth = applicationinfo.requiressmallestwidthdp;//android:requiressmallestwidthdp属性
      log.i("applicationinfo", "samllestwidth: " + samllestwidth);
      // 应用所需的最小sdk版本
      int sdkversion = applicationinfo.targetsdkversion;
      log.i("applicationinfo", "sdkversion: " + sdkversion);
      int theme = applicationinfo.theme;
      log.i("applicationinfo", "theme: " + theme);//android:theme=
      int uid = applicationinfo.uid;
      log.i("applicationinfo", "uid: " + uid);
      // 配置文件中的uioptions属性的值
      int uioptions = applicationinfo.uioptions;
      log.i("applicationinfo", "uioptions: " + uioptions);

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!