標籤:
最近在自己寫一個APP,有一個模組需要擷取手機應用的一些資訊。坑還是有,但都基本踩過了,自己把他實現了出來,實現方法還是很需要掌握的。底部彈出的對話方塊中四個選項的實現不多做說明,主要講講如何擷取這些安裝的應用資訊。好了,不多說,看看:
擷取手機安裝應用資訊:
1.寫一個JavaBean,用於存放應用資訊,生產get,set方法。
public class AppBean { private Drawable appIcon; private String appName; private int appSize; private boolean isSd=false; private boolean isSystem=false; private String appPackageName; public String getApkPath() { return apkPath; } public void setApkPath(String apkPath) { this.apkPath = apkPath; } private String apkPath; public String getAppPackageName() { return appPackageName; } public void setAppPackageName(String appPackageName) { this.appPackageName = appPackageName; } public Drawable getAppIcon() { return appIcon; } public void setAppIcon(Drawable appIcon) { this.appIcon = appIcon; } public String getAppName() { return appName; } public void setAppName(String appName) { this.appName = appName; } public int getAppSize() { return appSize; } public void setAppSize(int appSize) { this.appSize = appSize; } public boolean isSd() { return isSd; } public void setSd(boolean sd) { isSd = sd; } public boolean isSystem() { return isSystem; } public void setSystem(boolean system) { isSystem = system; }}
屬性寫的很清楚,這裡就不再多做注釋。
2.寫一個工具類,通過這個工具類,擷取到手機安裝應用的資訊。我們都知道,安卓的所有應用都在包管理中,基本上,一個應用對應著一個包資訊,所以,我們可以通過包管理器擷取,通過包管理器中getInstalledPackages(0);傳一個0,擷取到所有應用。具體實現代碼:
public static List<AppBean> getAllApk() { List<AppBean>appBeanList=new ArrayList<>(); AppBean bean=null; PackageManager packageManager= UIUtils.getContext().getPackageManager(); List<PackageInfo> list=packageManager.getInstalledPackages(0); for (PackageInfo p:list) { bean=new AppBean(); bean.setAppIcon(p.applicationInfo.loadIcon(packageManager)); bean.setAppName(packageManager.getApplicationLabel(p.applicationInfo).toString()); bean.setAppPackageName(p.applicationInfo.packageName); bean.setApkPath(p.applicationInfo.sourceDir); File file=new File(p.applicationInfo.sourceDir); bean.setAppSize((int) file.length()); int flags=p.applicationInfo.flags; //判斷是否是屬於系統的apk if ((flags& ApplicationInfo.FLAG_SYSTEM)!=0){ bean.setSystem(true); }else { bean.setSd(true); } appBeanList.add(bean); } return appBeanList; }
需要注意幾點:
*擷取應用的應用程式名稱要通過packageManager.getApplicationLabel(p.applicationInfo).toString(),如果通過p.applicationInfo.name是拿不到應用程式名稱字的。
*安卓中通過FlAG來標識應用是否是內建應用,判定方法如上。
*UIUtils.getContext()是我封裝的方法,用於調用Context上下文。
3.通過JavaBean取出資料展示:
略。
好了,展示資料就可以由自己隨意展示了,就寫到這,希望這篇文章對你的生活和學習有所協助。如果你想知道實現的效果,可以在下方評論留言,我會再下篇部落格更新~
Android開發之通過包管理器擷取安裝應用資訊