【发布时间】: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 模拟器。
-
您是否将
<queries>元素添加到清单中以处理 package visibility rules? -
嗨 CommonsWare 我没有,你能解释一下吗?
-
关于查询,我在想它检查的第一个应用程序是应用程序本身,所以不处理另一个应用程序,应该说是安装但不是。无论如何,我正在尝试查询谢谢
标签: android android-studio kotlin