Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》
如果想要获取系统手机应用的详细信息,那么下边代码可以直接作为模板使用。笔者对每一行代码都做了注解,供您参考。直接上代码:
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类详解》的更多相关文章
- Android简易实战教程--第二十一话《内容观察者监听数据库变化》
当数据库的数据发生改变,我们又想知道具体改变的情况时,就需要对数据库的变化情况做一个监控.这个任务,就由内容观察者来完成.下面这个案例,为短信数据库注册内容观察者,来监控短信的变化情况,当短信数据库发 ...
- Android简易实战教程--第十六话《SharedPreferences保存用户名和密码》
之前在Android简易实战教程--第七话<在内存中存储用户名和密码> 那里是把用户名和密码保存到了内存中,这一篇把用户名和密码保存至SharedPreferences文件.为了引起误导, ...
- Android简易实战教程--第十二话《代码获取手机总运行内存的大小》
手机RAM存储,类似于电脑的内存.这一篇,对通过代码获取手机总内存大小做详细介绍. 首先,定义一个engine类,这个类功能就是获取进程信息,包括运行的程序个数,系统总内存,系统剩余总内存.本篇先完成 ...
- Android简易实战教程--第二十九话《创建图片副本》
承接第二十八话加载大图片,本篇介绍如何创建一个图片的副本. 安卓中加载的原图是无法对其修改的,因为默认权限是只读的.但是通过创建副本,就可以对其做一些修改,绘制等了. 首先创建一个简单的布局.一个放原 ...
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
本篇接第二十五话 点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...
- Android简易实战教程--第十五话《在外部存储中读写文件》
第七话里面介绍了在内部存储读写文件 点击打开链接. 这样有一个比较打的问题,假设系统内存不够用,杀本应用无法执行,或者本应用被用户卸载重新安装后.以前保存的用户名和密码都不会得到回显.所以,有必要注意 ...
- Android简易实战教程--第二十八话《加载大图片》
Android系统以ARGB表示每个像素,所以每个像素占用4个字节,很容易内存溢出.假设手机内存比较小,而要去加载一张像素很高的图片的时候,就会因为内存不足导致崩溃.这种异常是无法捕获的 内存不足并不 ...
- Android简易实战教程--第二十五话《网络图片查看器》
访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...
- Android简易实战教程--第二十二话《自定义组合控件模拟qq登录下拉框和其中的一些”小技巧”》
转载此文章请注明出处:点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52313516 首先,很荣幸此专栏能被CSDN推荐到主页.荣 ...
随机推荐
- 【USACO】 洞穴奶牛
题目描述 贝西喜欢去洞穴探险.这次她去的地方由 N 个洞穴组成,编号分别是 1 到 N,1 号洞穴是出发 的起点. 洞穴之间由 M 条隧道相连,双向通行,第 i 条隧道连接 A i 和 B i .每条 ...
- hdu 5011(博弈)
题意:在许多堆石子中,两人轮流取,1.在一堆中取至少一个 2.将这一堆分成两堆 思路:NIM游戏,所有值的异或,当其为0时失败 nim游戏: 假设只有两堆,游戏人取得胜利并不在于N1和N2的值具体是 ...
- 2015 多校联赛 ——HDU5334(构造)
Virtual Participation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Ot ...
- bzoj4361isn 容斥+bit优化dp
4361: isn Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 375 Solved: 186[Submit][Status][Discuss] ...
- LCD接口和RGB介绍
1. 介绍 Video的显示离不开LCD, 所以这里简单介绍一下LCD的接口和RGB LCD的全称是Liquid Crystal Display 的简称, 即液晶显示器LCD目前已经取代CRT, 成为 ...
- 毕业设计-JSP论文盲审系统
之前做的一款jsp的论文盲审系统,ssh框架的,学生提交论文,系统管理员将论文分配给教员,教员在不知学员是谁的情况之下,对论文进行打分,然后提交给系统,最后系统发布成绩,供学员查看. 整体做的还不错, ...
- 基于Spark环境对比Python和Scala语言利弊
在数据挖掘中,Python和Scala语言都是极受欢迎的,本文总结两种语言在Spark环境各自特点. 本文翻译自 https://www.dezyre.com/article/Scala-vs-Py ...
- 《Java技术》第三次作业--面向对象——继承、抽象类、接口
1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Grandparen ...
- StarSpace是用于高效学习实体向量的通用神经模型
StarSpace是用于高效学习实体向量的通用神经模型,用于解决各种各样的问题: 学习单词,句子或文档级嵌入. 文本分类或任何其他标签任务. 信息检索:实体/文件或对象集合的排序,例如 排名网络文件. ...
- PostgreSQL 查看单表大小
1. 在数据库中查单个表 select pg_size_pretty(pg_relation_size('table_name')); 2. 查出并按大小排序 SELECT table_schema ...