Android簡易実戦チュートリアル--第11話「携帯電話のすべてのアプリケーション情報を取得する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;
	}
}