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


  • 相关阅读:
    这些简单优化能让你的Win10流畅很多
    win7系统登录界面背景怎么修改?
    如何在win7下通过easyBCD引导安装Ubuntu14.04
    为什么我的电脑打不开便签?
    打开Word为什么会出现感叹号呢???
    图像变换原理
    运行
    php、前端开发(网站建设)环境搭建
    zend studio面板功能
    zend studio汉化
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299629.html
Copyright © 2020-2023  润新知