最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android?獲取手機(jī)已安裝的應(yīng)用列表實(shí)現(xiàn)詳解

 更新時(shí)間:2023年08月03日 14:30:00   作者:清朝公主大清正黃旗  
這篇文章主要介紹了Android?獲取手機(jī)已安裝的應(yīng)用列表的實(shí)現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

1、掃描已安裝的應(yīng)用列表

var queryIntentActivities = mutableListOf<ResolveInfo>()
        val intent = Intent(Intent.ACTION_MAIN).addCategory(Intent.CATEGORY_LAUNCHER)
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
            queryIntentActivities =
                packageManager.queryIntentActivities(intent, PackageManager.MATCH_ALL)
        } else {
            queryIntentActivities = packageManager.queryIntentActivities(intent, 0)
        }

上面代碼中,queryIntentActivities 就是獲取的應(yīng)用列表數(shù)據(jù)

遍歷獲取每個(gè)應(yīng)用的信息

下面就直接通過(guò)遍歷獲取每個(gè)應(yīng)用的信息了

queryIntentActivities.forEach {
            bean = AppInfoBean(
                icon = it.loadIcon(packageManager),
                appName = it.loadLabel(packageManager).toString(),
                appPackageName = it.activityInfo.applicationInfo.packageName
            )
            appBeanList.add(bean!!)
        }

上面 AppInfoBean 是自己定義的實(shí)體bean 里面有應(yīng)用的名稱,包名,還有Drawable 類型的應(yīng)用icon
appBeanList 是定義的list變量,

注意:這里提個(gè)醒,也是我遇到的一個(gè)小問(wèn)題,在掃描所有應(yīng)用的時(shí)候,Intent的action 是:Intent.ACTION_MAIN 切記,否則一個(gè)也查不到,

添加權(quán)限

還有,可能你通過(guò)上面獲取的應(yīng)用列表只有幾個(gè),不全,此時(shí),你需要添加一個(gè)權(quán)限:

<uses-permission
        android:name="android.permission.QUERY_ALL_PACKAGES"
        tools:ignore="QueryAllPackagesPermission" />

有了上面這個(gè)權(quán)限,你才能獲取到所有的應(yīng)用

通過(guò)包名查詢對(duì)應(yīng)應(yīng)用的圖標(biāo)icon

    /**
     * 根據(jù)應(yīng)用包名,查應(yīng)用的icon圖
     */
    private fun loadAppIconByPackageName(packageName:String,listener:(icon:Drawable) -> Unit){
        try {
            if (packageManager == null){
                packageManager = BaseApp.myApp.packageManager
            }
            val packageInfo = packageManager?.getPackageInfo(
                packageName,
                PackageManager.GET_ACTIVITIES
            )
            packageInfo?.applicationInfo?.loadIcon(packageManager)?.let { listener.invoke(it) }
        } catch (e: Exception) {
            listener.invoke(BaseApp.myApp.resources.getDrawable(R.mipmap.ic_launcher))
        }
    }

這個(gè)就簡(jiǎn)單了,獲取當(dāng)前的packageManager 就可以進(jìn)行獲取對(duì)應(yīng)的icon了,不過(guò)這個(gè)跟上面獲取應(yīng)用一樣,也需要權(quán)限和否則可能也會(huì)遇到掃描不到的問(wèn)題哦。

通過(guò)包名獲取對(duì)應(yīng)應(yīng)用的啟動(dòng)頁(yè)的全類名

/**
  * 通過(guò)包名獲取app的入口activity
  */
 @SuppressLint("WrongConstant")
 fun getAppEnter(context: Context, packageName: String): String {
     var mainAct = ""
     try {
         val intent = Intent().apply {
             action = Intent.ACTION_MAIN
             addCategory(Intent.CATEGORY_LAUNCHER)
         }
         val list =
             context.packageManager.queryIntentActivities(intent, PackageManager.GET_ACTIVITIES)
         list.forEach {
             if (TextUtils.equals(it.activityInfo.packageName, packageName)) {
                 mainAct = it.activityInfo.name
             }
         }
     } catch (ex: Exception) {
     } finally {
         return mainAct
     }
 }

這個(gè)需要注意的事項(xiàng)和第一個(gè)獲取應(yīng)用列表一樣,其他的都沒(méi)什么需要注意的了。

以上就是Android 獲取手機(jī)已安裝的應(yīng)用列表實(shí)現(xiàn)詳解的詳細(xì)內(nèi)容,更多關(guān)于Android 獲取應(yīng)用列表的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

兴化市| 黔江区| 华安县| 横山县| 若尔盖县| 平凉市| 河津市| 海南省| 甘谷县| 鄄城县| 乌鲁木齐县| 池州市| 星座| 西城区| 静宁县| 鄂温| 二连浩特市| 沐川县| 文水县| 龙陵县| 宽甸| 潢川县| 屏山县| 永兴县| 菏泽市| 鹤山市| 河池市| 新干县| 泰州市| 大姚县| 旬邑县| 宁强县| 巫山县| 佛学| 筠连县| 义乌市| 兰西县| 新竹市| 靖远县| 屏东市| 平凉市|