小说网站 搜小说 无限网 烟雨红尘 小说爱好者 免费小说 免费小说网站

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;
	}
}



posted on 2016-07-30 07:46  王小航  阅读(182)  评论(0编辑  收藏  举报

导航