【问题标题】:Kotlin Check Installed Packages from Array ListKotlin 从数组列表中检查已安装的包
【发布时间】:2023-01-23 19:54:44
【问题描述】:

我是 Kotlin 的新手,我试图获取设备上已安装软件包的列表。 我做对了,因为如果我手动传递值,它就可以工作,但是当我放入一个 For 以从数组中获取每个包进行检查时,它没有说所有的包都没有安装,即使有几个包,通过它们手动,完美工作。 按照代码:

  override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_settings)
        button.setOnClickListener {
            var checkapk = CheckAPKs()
            //checkapk.isAppInstalled("com.downloadapk", textView, this) mm,
          //  var listOfAvs: Array<String> = Config.avsList.listOfAvs
            var count = 0
            for (apks: String in avsList.listOfAvs) {
                count++
                    textView.text = textView.text.toString() + "\nPKG:" + apks + "\n"
                    checkapk.checkAppInstall(this, textView, apks)
            }
        }
    }
class CheckAPKs {
fun checkAppInstall(context: Context,textView: TextView, packageName: String?): Boolean {
    return try {
        context.packageManager.getApplicationInfo(packageName,0)
        textView.text = textView.text.toString() +"[V]"+ packageName
        true
    } catch (e: PackageManager.NameNotFoundException) {
        textView.text = textView.text.toString() +"[X]"+ packageName
        false
    }
}

最后,Array with packages 列表

 var listOfAvs: Array<String> = arrayOf(
        "com.thisApk",
        "com.packages2"
        ,"com.packages3")

但遗憾的是,如前所述,当我通过“com.thisApk”时,我总是在 textView 中得到“[X]”而不是“[V]”(意味着应用程序已安装) 有什么建议吗? 谢谢,任何人:-)

【问题讨论】:

  • 你在什么 Android 上测试这个?您可能会遇到权限异常
  • Android 11,API 30 模拟器。
  • 您是否将 &lt;queries&gt; 元素添加到清单中以处理 package visibility rules?
  • 嗨 CommonsWare 我没有,你能解释一下吗?
  • 关于查询,我在想它检查的第一个应用程序是应用程序本身,所以不处理另一个应用程序,应该说是安装但不是。无论如何,我正在尝试查询谢谢

标签: android android-studio kotlin


【解决方案1】:

在您的活动中创建此功能:

fun checkInstalled(uriList: List<String>): Boolean {
   val pm = packageManager
   
   uriList.forEach {
        val app_installed = try {
            pm.getPackageInfo(it, PackageManager.GET_ACTIVITIES)
            true
        } catch (e: PackageManager.NameNotFoundException) {
            Log.i(TAG, e.toString())
            false
        }
       if (app_installed) return true
   }

   return  false
}

使用它

if (checkInstalled(yourList)) { // Do action }

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-30
    • 2017-11-05
    • 2019-01-08
    • 2016-02-13
    • 2018-01-26
    • 2020-12-22
    相关资源
    最近更新 更多