想要獲取手機(jī)中的應(yīng)用信息,有兩種方式:
MainClass:
packageManager
ResolveInfo
PackageInfo
方法一 packageManager + PackageInfo:
//獲取手機(jī)中安裝的所有應(yīng)用
fun getPKList(context: Context): List<PackageInfo> {
val pm = context.packageManager
val ip = pm.getInstalledPackages(0) // 獲取全部安裝的應(yīng)用
val flag = PackageManager.GET_ACTIVITIES + PackageManager.GET_PERMISSIONS //0 可以是里面的組合穴店,參考源代碼
val baiduMap = pm.getInstallerPackageName("com.baidu.BaiduMap")//查詢?cè)O(shè)備是否安裝百度地圖獲取指定應(yīng)用
ip.iterator().forEach {
if (it.packageName.contains("com.baidu.BaiduMap", true)) { //根據(jù)包名過濾應(yīng)用
Log.e(TAG, "getPackgeList baidu >>${it.packageName}")
val appName = pm.getApplicationLabel(it.applicationInfo) // 更具packageInfo獲取應(yīng)用名稱
if (appName.contains("地圖")) Log.e(TAG, "appName>>${appName}") // 輸出應(yīng)用名稱
}
}
return ip
}
方法二 packageManager + ResolveInfo:
fun getPackageList(context: Context): List<ResolveInfo> {
val pm = context.packageManager
val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_DEFAULT) //獲取所安裝應(yīng)用的默認(rèn)入口Activity
//返回所有應(yīng)用的入口activty信息
val list = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY) //根據(jù)過濾條件,過濾Activity
Collections.sort(list, ResolveInfo.DisplayNameComparator(pm)) // 進(jìn)行排序很重要菇晃,排序后才顯示第三方app
return list
}
如果想要查詢手機(jī)中的地圖類應(yīng)用:
//獲取手機(jī)中的Map應(yīng)用
fun checkMapAPP(context: Context): List<APPInfo> {
val ip = getPackageList(context)
val pm = context.packageManager
val tempList = ArrayList<APPInfo>()
ip.iterator().forEach {
if (it.activityInfo.packageName.contains(context.resources.getString(R.string.package_name_in_map), true)) {
val appName = it.loadLabel(pm).toString()
if (appName.contains(context.resources.getString(R.string.app_name_in_map))) {
tempList.add(APPInfo(appName, it))
Log.e(TAG, "MAP APP packageName>>${it.activityInfo.packageName}")
Log.e(TAG, "MAP APP resolvePackageName>>${it.resolvePackageName}")
Log.e(TAG, "MAP APP appName>>${appName}")
Log.e(TAG, "MAP APP activityInfo name>>${it.activityInfo.name}")
}
}
}
return tempList
}