获取App应用列表,不需要权限

业务需要获取用户的已安装的应用列表进行上传。

但是获取应用安装列表的权限现在属于敏感权限,即QUERY_ALL_PACKAGES权限。

实现步骤:

1.Manifest文件里进行配置

    <queries>
        <intent>
            <action android:name="android.intent.action.MAIN" />
        </intent>
    </queries>

2.实现代码 AppUtils.kt

package com.uz.cashloanuzi.grab

import android.annotation.SuppressLint
import android.content.pm.ApplicationInfo
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Build
import com.uz.cashloanuzi.base.BaseApplication

object AppUtils {

    @SuppressLint("QueryPermissionsNeeded")
    fun getAppsInfo(): List<AppInfo?> {
        val list: MutableList<AppInfo?> =
            ArrayList()
        val pm: PackageManager = BaseApplication.application?.packageManager ?: return list
        val installedPackages = pm.getInstalledPackages(0)
        for (pi in installedPackages) {
            val ai: AppInfo = getBean(pm, pi) ?: continue
            list.add(ai)
        }
        return list
    }

    private fun getBean(
        pm: PackageManager,
        pi: PackageInfo?
    ): AppInfo? {
        if (pi == null) return null
        val versionName = pi.versionName
        val packageName = pi.packageName
        val ai = pi.applicationInfo
            ?: return AppInfo(
                packageName,
                "",
                1,
                1,
                "",
                false
            )
        val name = ai.loadLabel(pm).toString()
        val installTime: Long =
            pi.firstInstallTime
        val updateTime: Long =
            pi.lastUpdateTime

        val isSystem = (ApplicationInfo.FLAG_SYSTEM and ai.flags) != 0
        return AppInfo(
            packageName,
            name,
            installTime,
            updateTime,
            versionName,
            isSystem
        )
    }
}

data class AppInfo(
    var packageName: String?,
    var appName: String?,
    var firstInstallTime: Long?,
    var lastUpdateTime: Long?,
    var versionName: String?,
    var system: Boolean
) {
    override fun toString(): String {
        return """{
      pkg name: $packageName
      app name: $appName
      firstTime : $firstInstallTime
      lastUpdateTime : $lastUpdateTime
      versionName : $versionName
      is system: $system
            }"""
    }
}


这样就是获取了安装列表的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

&岁月不待人&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值