獲取安裝應用的相關信息到列表

/**
 * 從該類獲取所有的應用信息
 * 系統的app都安裝在:system/app目錄下
 * 用戶應用都安裝在:data/app目錄下
 */
public class AppInfoProvider {
    
    /**
     * 獲取安裝在該手機的所有app信息,並且分好類(系統程序,用戶程序)
     * 信息:包名,圖片,應用名,應用安裝位置,應用類型
     * @param context
     * @return
     */
    public static HashMap<String,ArrayList<AppInfo>> getAppInfos(Context context){
        //獲取應用管理者
        PackageManager pm = context.getPackageManager();
        //所有安裝在手機上的應用程序包信息
        List<PackageInfo> packInfos = pm.getInstalledPackages(0);
        HashMap<String,ArrayList<AppInfo>> map=new HashMap<String, ArrayList<AppInfo>>();//放所有app信息
        ArrayList<AppInfo> userList=new ArrayList<AppInfo>();//放用戶程序
        ArrayList<AppInfo> systemList=new ArrayList<AppInfo>();//放系統程序
        for (PackageInfo packInfo : packInfos) {
            //packageInfo 相當於一個應用程序apk包的清單文件
            String packname=packInfo.packageName;//獲取應用包名
            //packInfo.applicationInfo相當於清單文件中的application
            Drawable icon = packInfo.applicationInfo.loadIcon(pm);//獲取應用圖標
            String name = packInfo.applicationInfo.loadLabel(pm).toString();//應用名稱
            //將得到的信息設置到自定義應用的封裝類中
            AppInfo app=new AppInfo();
            app.setIcon(icon);
            app.setName(name);
            app.setPackname(packname);
            //flags攜帶了很多種狀態信息
            int flags = packInfo.applicationInfo.flags;//應用程序信息的標記
            if((flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) ==0){
                app.setInRom(true);//安裝在手機內存中
            }else{
                app.setInRom(false);//安裝在外部存儲
                System.out.println("外部");
            }
            if((flags & ApplicationInfo.FLAG_SYSTEM)==0){
                app.setUserApp(true);//用戶程序
                userList.add(app);
            }else{
                app.setUserApp(false);//系統程序
                systemList.add(app);
            }
        }
        map.put("用戶程序", userList);
        map.put("系統程序", systemList);
        return map;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章