如果想要获取系统手机应用的详细信息,那么下边代码可以直接作为模板使用。笔者对每一行代码都做了注解,供您参考。直接上代码:

package com.example.itydl.engines;

import java.io.File;
import java.util.ArrayList;
import java.util.List; import com.example.itydl.domain.AppBean; import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Environment; /**
* Engine类,获取所有安装的apk详细信息
* @author ydl
*
*/
public class AppManagerEngine {
/**
*
* @param context
* @return
* sd卡的可用空间,单位为byte
*/
public static long getSDAvailSpace(Context context){
long sdAvaliSpace = 0; //获取sd卡的目录
File externalStorageDirectory = Environment.getExternalStorageDirectory();
//获取sd卡的可用空间。通过文件夹来间接计算剩余空间大小
sdAvaliSpace = externalStorageDirectory.getFreeSpace();
//把获取的剩余数据返回
return sdAvaliSpace;
} /**
*
* @param context
* @return
* 手机ROM中的剩余空间
*/
public static long getRomAvailSpace(Context context){
long romAvaliSpace = 0;
//获取rom所有目录结构
File dataDirectory = Environment.getDataDirectory();
//获取rom的可用空间。通过文件夹来间接计算剩余空间大小
romAvaliSpace = dataDirectory.getFreeSpace();
//把获取的剩余数据返回
return romAvaliSpace;
} /**
*
* @param context
* @return
* 所有的安装了的apk的详细信息
*/
public static List<AppBean> getAllInstalledApks(Context context){ List<AppBean> apksBean = new ArrayList<AppBean>(); //获取包管理器
PackageManager manager = context.getPackageManager();
//通过包管理器对象,获取所有的安装了的apk的信息
List<PackageInfo> installedPackages = manager.getInstalledPackages(0);//Return a List of all packages that are installed on the device.
//遍历所有应用包信息,分别得到每个应用包的详细信息。就可以对该应用的数据在界面显示了
for (PackageInfo packageInfo : installedPackages) {
//把每个包的应用信息,封装到javabean里面。创建AppBean类
AppBean bean = new AppBean(); //设置apk的包名
bean.setPackName(packageInfo.packageName);
//设置apk的名字,记住
bean.setAppName(packageInfo.applicationInfo.loadLabel(manager)+"");//loadLabel(manager)获取标签
//设置apk的图标
bean.setIcon(packageInfo.applicationInfo.loadIcon(manager));
//设置apk的大小。通过获取apk文件,间接获取该apk的占用空间大小
String sourceDir = packageInfo.applicationInfo.sourceDir;//得到该应用的一个路径
//得到该路径的文件
File file = new File(sourceDir);
//得到apk的大小,字节为单位
bean.setSize(file.length());//Returns the length of this file in bytes.
//根据标志位,是否是系统apk或者用户apk
//获取该apk的flag属性
int flag = packageInfo.applicationInfo.flags; //判断是否是系统的apk
if((flag&ApplicationInfo.FLAG_SYSTEM)!=0){//ApplicationInfo.FLAG_SYSTEM表示系统的apk的flag标志
//是系统的apk
bean.setSystem(true);//是系统应用的标记
}else{
//不是系统的apk
bean.setSystem(false);
} //判断应用安装在了系统还是sd
if((flag & ApplicationInfo.FLAG_EXTERNAL_STORAGE)!=0){
//安装在了sd卡
bean.setSd(true);//sd卡的标记
}else{
bean.setSd(false);//rom中的标记
} //把获取的每一个apk的信息对象封装到数据源模型层
apksBean.add(bean); } return apksBean;
}
}

Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》的更多相关文章

  1. Android简易实战教程--第二十一话《内容观察者监听数据库变化》

    当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...

  2. Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》

    之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...

  3. Android简易实战教程--第十二话《代码获取手机总运行内存的大小》

    手机RAM存储,类似于电脑的内存.这一篇,对通过代码获取手机总内存大小做详细介绍. 首先,定义一个engine类,这个类功能就是获取进程信息,包括运行的程序个数,系统总内存,系统剩余总内存.本篇先完成 ...

  4. Android简易实战教程--第二十九话《创建图片副本》

    承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...

  5. Android简易实战教程--第二十六话《网络图片查看器在本地缓存》

    本篇接第二十五话  点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...

  6. Android简易实战教程--第十五话《在外部存储中读写文件》

    第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...

  7. Android简易实战教程--第二十八话《加载大图片》

    Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...

  8. Android简易实战教程--第二十五话《网络图片查看器》

    访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...

  9. Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》

    转载此文章请注明出处:点击打开链接   http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...

随机推荐

  1. 【网络流】【BZOJ1070】【SCOI2007】修车

    原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1070 题意:问你如何分配老司机使得每部车的等待时间之和最短. 解题思路:本题不易正做,考虑 ...

  2. 【Uva 10269 马里奥与公主的归途】

    ·马里奥n次解救了公主,现在需要从魔王的宫殿返回. ·英文题,述大意:      给定一个点数不超过100的无向图,其中的点分为两类:乡村和城堡. 输入A个乡村,B个城堡(乡村编号1~A,城堡编号A+ ...

  3. 例10-2 uva12169(扩展欧几里得)

    题意:已知xi=(a*xi-1+b) mod 10001,且告诉你x1,x3.........x2*t-1,让你求出其偶数列 思路: 枚举a,然后通过x1,x3求出b,再验证是否合适 1.设a, b, ...

  4. bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法

    4559: [JLoi2016]成绩比较 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 261  Solved: 165[Submit][Status ...

  5. java 之 MyBatis(sql 可以执行,在eclipse执行报错问题)

    前段时间写 mybatis Sql 查询语句的时候,发现一个很奇怪的现象,我写的SQL 语句在 pl/Sql 中明明可以执行,但是放到 eclipse 中执行却报错,因为时间比较久,依稀记得是文字与字 ...

  6. ESLint规范

    配置如下:{ // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser":true, " ...

  7. chrome不支持embed标签解决方案

    <!DOCTYPE html> <html> <head> <title></title> <meta http-equiv=&quo ...

  8. # electron-vue 尝试做个网易云音乐

    当跑起来electron第一刻 我发现这个浏览器头是不是有点丑 是不是可以隐藏起来呢,答案当然是可以的 src/main/index.js mainWindow = new BrowserWindow ...

  9. MySQL的Explain关键字查看是否使用索引

    explain显示了MySQL如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.简单讲,它的作用就是分析查询性能. explain关键字的使用方法很简单,就是 ...

  10. CAP原理和BASE思想和ACID模型

    问题的解读 对于上面三个例子,相信大家一定看出来了,我们的终端用户在使用不同的计算机产品时对于数据一致性的需求是不一样的: 1.有些系统,既要快速地响应用户,同时还要保证系统的数据对于任意客户端都是真 ...