1. package com.loaderman.demo;
  2.  
  3. import android.content.Context;
  4. import android.content.pm.ApplicationInfo;
  5. import android.content.pm.PackageInfo;
  6. import android.content.pm.PackageManager;
  7. import android.graphics.drawable.Drawable;
  8.  
  9. import java.io.File;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12.  
  13. /**
  14. * <p>
  15. * 提供应用信息的工具类
  16. * <p>
  17. * 软件安装位置:
  18. * <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  19. * android:installLocation="internalOnly"//默认只允许安装在手机内存
  20. * >
  21. * preferExternal: 优先sdcard, 如果sdcard已满,不存在, 就安装在手机内存
  22. * auto: 优先手机内存
  23. * <p>
  24. * 软件安装流程:
  25. * 1. 默认, 第三方软件安装时, 系统将apk拷贝到data/app目录下, 完成安装! 用户可以选择将apk移动到sdcard
  26. * 2. 系统软件: system/app目录下
  27. * <p>
  28. * ROOT: 获取手机系统管理员权限, 默认手机出厂后都没有ROOT
  29. * 一旦ROOT, 所有文件都可以随意修改, 不安全
  30. * <p>
  31. * 使用一键Root大师, 刷机大师, 都可以ROOT手机
  32. */
  33.  
  34. public class AppInfoProvider {
  35.  
  36. //获取已安装的app
  37. public static ArrayList<AppInfo> getInstalledApps(Context ctx) {
  38. PackageManager pm = ctx.getPackageManager();
  39. List<PackageInfo> installedPackages = pm.getInstalledPackages(0);//获取已安装的app
  40.  
  41. ArrayList<AppInfo> list = new ArrayList<>();
  42. for (PackageInfo packageInfo : installedPackages) {
  43. AppInfo info = new AppInfo();
  44.  
  45. String packageName = packageInfo.packageName;//包名
  46. info.packageName = packageName;
  47.  
  48. ApplicationInfo applicationInfo = packageInfo.applicationInfo;//应用信息的对象
  49. String name = applicationInfo.loadLabel(pm).toString();//应用名称
  50. Drawable icon = applicationInfo.loadIcon(pm);//图标对象
  51. info.name = name;
  52. info.icon = icon;
  53.  
  54. String sourceDir = applicationInfo.sourceDir;//apk的安装路径
  55. File file = new File(sourceDir);
  56. long size = file.length();//文件大小
  57. info.size = size;
  58.  
  59. //System.out.println(name);
  60. //判断软件安装位置
  61. //状态机
  62. int flags = applicationInfo.flags;//标记, 可以记录当前app的一些特性
  63. if ((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) > 0) {
  64. //就认为当前app具备FLAG_EXTERNAL_STORAGE特性
  65. //安装在sdcard
  66. info.isSdcard = true;
  67. } else {
  68. //安装在手机内存
  69. info.isSdcard = false;
  70. }
  71.  
  72. //判断软件类型, 用户?系统?
  73. if ((flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
  74. //就认为当前app具备FLAG_SYSTEM特性
  75. //系统应用
  76. info.isUserApp = false;
  77. } else {
  78. //用户应用
  79. info.isUserApp = true;
  80. }
  81.  
  82. list.add(info);
  83. }
  84.  
  85. return list;
  86. }
  87.  
  88. }
  1. package com.loaderman.demo;
  2.  
  3. import android.graphics.drawable.Drawable;
  4.  
  5. /**
  6. *应用对象
  7. */
  8.  
  9. public class AppInfo {
  10.  
  11. public String packageName;
  12. public String name;
  13. public Drawable icon;
  14. public long size;
  15. public boolean isSdcard;//标记是否安装在sdcard
  16. public boolean isUserApp;//标记是否是用户应用
  17.  
  18. }

AppInfoProvider提供应用信息的工具类的更多相关文章

  1. Android设备网络、屏幕尺寸、SD卡、本地IP、存储空间等信息获取工具类

    Android设备网络.屏幕尺寸.SD卡.本地IP.存储空间.服务.进程.应用包名等信息获取的整合工具类. package com.qiyu.ddb.util; import android.anno ...

  2. Android开发之获取APP的应用程序名称以及版本名称信息java工具类

    //跟App相关的辅助类 public class AppUtils { private AppUtils() { /* cannot be instantiated */ throw new Uns ...

  3. Java之加密(信息摘要)工具类(依赖:java.security.MessageDigest或org.apache.commons.codec.digest.DigestUtils)

    依赖于java.security.MessageDigest,支持MD5,SHA-1,SHA-256 import java.security.MessageDigest; import java.s ...

  4. Guava库介绍之实用工具类

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  5. Spring常用工具类

    Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作: 1.Resource访问文件资源: 具体有: ResourceUtils.getFile(url); FileSystemReso ...

  6. spring中常用工具类介绍

    http://www.cnblogs.com/langtianya/p/3875103.html 文件资源操作     Spring 定义了一个 org.springframework.core.io ...

  7. 工具类HttpServerUtility

    在ASP.NET服务器上提供一个辅助的工具类HttpServerUtility,该类提供了一些处理请求的辅助方法. MapPath:计算网站中虚拟路径所对应的物理文件路径. HtmlEncode:将H ...

  8. Spring 的优秀工具类盘点

    文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...

  9. spring常用的工具类

    spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入 ...

随机推荐

  1. Phoenix实现分页查询

    1 利用offset语法,官网的语法 ELECT * FROM TEST LIMIT 1000; SELECT * FROM TEST LIMIT 1000 OFFSET 100; 2 公式如下 SE ...

  2. linux常用查看命令

    一般查看 cat -n 文件名 n 代表显示行号 分页查看 more 文件名 more -50 文件名 -50 代表一页显示50行 向下翻页  空格 向上翻页 b more +/搜索值 文件名 查找文 ...

  3. PAT Basic 1056 组合数的和 (15 分)

    给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则可以组合出:25.28.52.58.82.85 ...

  4. Java语言基础(8)

    1 数组(二) 1)for-each循环:增强的for循环,JDK1.5推出的,用来输出数组和集合中每一个元素的值. for(数据类型 变量 : 数组名){ 变量:临时保存元素的值 } 数据类型必须跟 ...

  5. Tomcat基础知识

    介绍Tomcat之前先介绍下Java相关的知识. 各常见组件: 1.服务器(server):Tomcat的一个实例,通常一个JVM只能包含一个Tomcat实例:因此,一台物理服务器上可以在启动多个JV ...

  6. numpy的ndarray数组如何reshape成固定大小

    在做肺结节检测的时候,遇到dicom文件reshape之后尺寸大小不一.因为大下不一,numpy.reshape又无法重塑成指定大小的.最后还是在一个大牛的代码中找到了解决方法. VL = np.lo ...

  7. 51nod 1850 抽卡大赛 (十二省联考模测) DP

    O(n4)O(n^4)O(n4)的DP很好想,但是过不了.来看看O(n3)O(n^3)O(n3)的把. Freopen的博客 CODE #include <cstdio> #include ...

  8. SparkSQL之UDAF使用

    1.创建一个类继承UserDefinedAggregateFunction类. ------------------------------------------------------------ ...

  9. docker使用 Flannel(etcd+flannel)网络

    一.Flannel网络简介 Flannel是一种基于overlay网络的跨主机容器网络解决方案,也就是将TCP数据包封装在另一种网络包里面进行路由转发和通信,Flannel是CoreOS开发,专门用于 ...

  10. 【Python之路】特别篇--Django生产环境部署

    Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. uWSGI uWSGI是一个Web服务器,它实现了WSGI协议.uwsgi.http等协议.Nginx中H ...