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

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. 【Gcd】

    [题目描述] 有 n 个正整数 x1~xn,初始时状态均为未选.有 m 个操作,每个操作给定一个编号 i,将 xi 的选取状态取反.每次操作后,你需要求出选取的数中有多少个互质的无序数对. [输入数据 ...

  2. bzoj1227 组合数学+bit

    1227: [SDOI2009]虔诚的墓主人 Time Limit: 5 Sec  Memory Limit: 259 MBSubmit: 1412  Solved: 664[Submit][Stat ...

  3. ubuntu14.0464位 Ros环境 安装halcon13.01

    至于ROS的系统,之前就是安装好的,如果有疑问的可以参考官网的安装教程,按照指令一步一步的操作,http://wiki.ros.org/cn/indigo/Installation/Ubuntu (1 ...

  4. 计科1702冯亚杰C语言程序设计预备作业

    阅读邹欣老师的博客--师生关系,针对文中的几种师生关系谈谈你的看法,你期望的师生关系是什么样的? 答:首先老师和学生之间要互相尊重,我认为这是必要的.在第一点的基础上师生要互相帮助,互相配合,共同进步 ...

  5. python3全栈开发-补充UDP的套接字、操作系统、并发的理论基础

    一.基于UDP的套接字 udp套接字简单示例 import socket ip_port=('1.1.1.1',8181) BUFSIZE=1024 udp_server_client=socket. ...

  6. Ubuntu16.04下安装jdk1.8过程

    笔者环境:腾讯云服务器 Ubuntu16.04 x64 一 . 去oracle官网下载对应的jdk 下载地址:http://www.oracle.com/technetwork/java/javase ...

  7. CSharpGL(48)用ShadowVolume画模型的影子

    CSharpGL(48)用ShadowVolume画模型的影子 在Per-Fragment Operations & Tests阶段,有一个步骤是模版测试(Stencil Test).依靠这一 ...

  8. JavaScript switch 语句

    switch 语句用于基于不同的条件来执行不同的动作. JavaScript switch 语句 请使用 switch 语句来选择要执行的多个代码块之一.你可以在JavaScript编程实战中了解怎么 ...

  9. ubuntu16.04下安装opencv

    source url:http://blog.csdn.net/zhuiqiuk/article/details/5308505811 1 依赖包sudo apt-get install build- ...

  10. Useful command for Docker

    Copy file from Container to Host: docker cp <containerId>:/file/path/within/container /host/pa ...