当前位置: 移动技术网 > IT编程>移动开发>Android > Android ApplicationInfo 应用程序信息的详解

Android ApplicationInfo 应用程序信息的详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

mimiying,纳尼网,怀孕初期怕冷

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);

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网