業(yè)務(wù)場(chǎng)景
最近在項(xiàng)目中用到了應(yīng)用下載的功能践叠,但是需要判斷本機(jī)中是否已經(jīng)安裝了該應(yīng)用居夹,如果本機(jī)已經(jīng)安裝,則過(guò)濾掉應(yīng)用列表中可下載的應(yīng)用。
該功能主要是用了的PackageManager的管理工具业舍,Android系統(tǒng)為我們提供了很多服務(wù)管理的類,包括ActivityManager升酣、PowerManager(電源管理)舷暮、AudioManager(音頻管理)等。除此之外噩茄,還提供了一個(gè)PackageManger管理類下面,它的主要職責(zé)是管理應(yīng)用程序包。通過(guò)PackageManager绩聘,我們就可以獲取應(yīng)用程序信息沥割。
實(shí)現(xiàn)方案
項(xiàng)目中用到了工具類AndroidUtilCode中的AppUtils.java工具類,該工具類中提供了獲取本機(jī)已安裝應(yīng)用的清單信息凿菩。主要代碼為:
public static List<AppInfo> getAppsInfo() {
List<AppInfo> list = new ArrayList<>();
PackageManager pm = Utils.getApp().getPackageManager();
if (pm == null) return list;
List<PackageInfo> installedPackages = pm.getInstalledPackages(0);
for (PackageInfo pi : installedPackages) {
AppInfo ai = getBean(pm, pi);
if (ai == null) continue;
list.add(ai);
}
return list;
}
獲取到的包信息主要為:
{"icon":{"mBitmapState":{},"mTargetDensity":560,"mCallback":null,"mSrcDensityOverride":0},"isSystem":false,
"name":"BRVAH","packageName":"com.chad.baserecyclerviewadapterhelper",
"packagePath":"/data/app/com.chad.baserecyclerviewadapterhelper-li-BfpiDYm0aGt_Gt7ngMg\u003d\u003d/base.apk",
"versionCode":9,"versionName":"3.0"}
然后可以根據(jù)對(duì)應(yīng)的包名信息來(lái)進(jìn)行過(guò)濾机杜,過(guò)濾掉本機(jī)已經(jīng)安裝的應(yīng)用。特此記錄下衅谷。