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

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. bzoj 3214: [Zjoi2013]丽洁体

    Description 平时的练习和考试中,我们经常会碰上这样的题:命题人给出一个例句,要我们类比着写句子.这种往往被称为仿 写的题,不单单出现在小学生的考试中,也有时会出现在中考中.许多同学都喜欢做 ...

  2. ●UVA 1608 Non-boring sequences

    题链: https://vjudge.net/problem/UVA-1608#author=chenchonghan题解: 分治 如果一个区间[l,r]里面在p位置出现了一个只出现一次的元素,(如果 ...

  3. 【NOIP2017 OFO】

    ·奇怪的标题可能预示着这一篇博文不是讲算法或者分享题目的吧. [一只情绪化的兔子]      今年的11月12日出奇地比去年温暖.两场比赛结束后的我们在临走前去尝试了OFO共享单车,在成都电子科技大学 ...

  4. ●BZOJ 3551 [ONTAK2010]Peaks(在线)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3551 题解: 最小生成树 Kruskal,主席树,在线 这个做法挺巧妙的...以Kruska ...

  5. web.xml is missing and <failOnMissingWebXml> is set to true

    这时候需要右击项目-->Java EE Tools-->Generate Deployment Descriptor Stub .然后系统会在src/main/webapp/WEB_INF ...

  6. (转载)JVM知识小集

    1. 内存模型以及分区,需要详细到每个区放什么. 2. 堆里面的分区:Eden,survival from to,老年代,各自的特点. 3. 对象创建方法,对象的内存分配,对象的访问定位. 4. GC ...

  7. vue-cli中配置sass

    第一步, npm install node-sass --save-dev npm install sass-loader --save-dev 第二部,打开webpack.base.config.j ...

  8. ACM Red and Black

    有一个矩形的房间,覆盖着方砖. 每个瓷砖都是红色或黑色. 一个男人站在黑色的瓷砖上,他可以移动到四个相邻的瓷砖之一.  但他不能在红砖上移动,他只能在黑砖上移动. 编写一个程序来计算他可以通过重复上述 ...

  9. 守护态运行Docker容器

    更多的时候,需要让 Docker 容器在后台以守护态(Daemonized)形式运行.此时,可以通过添加 -d 参数来实现. 例如下面的命令会在后台运行容器. $ sudo docker run -d ...

  10. spring-boot配置静态资源映射的坑:properties文件不能添加注释

    如此博文所述,Spring Boot 对静态资源映射提供了默认配置 默认将 /** 所有访问映射到以下目录:classpath:/staticclasspath:/publicclasspath:/r ...