如何解决如果API30不可用,如何运行Android应用或在PlayStore上安装?
我有一个要运行其他应用程序的Android应用程序。如果尚未安装这些应用程序,我想打开PlayStore让用户安装它们:
var info : ApplicationInfo? = null
try {
info = pm.getApplicationInfo(packageName,0) as ApplicationInfo
} catch (e: PackageManager.NameNotFoundException){
val intent = Intent(Intent.ACTION_VIEW)
intent.data = Uri.parse("market://details?id=$packageName")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
context.startActivity(intent)
}
if (info != null) {
val intent = pm.getintentForPackage(packageName) as Intent
context.startActivity(intent)
}
例如,此代码段到目前为止对API 26(Android 8)都有效。但是对于API 30(Android 11),getApplicationInfo()
总是抛出NameNotFoundException
,即使我已经安装了该应用程序。
这是怎么了?
解决方法
On Android 11,PackageManager
上的方法,例如getApplicationInfo()
在默认情况下不再起作用。您需要:
- 不给他们打电话,或者
- 在清单中添加
<queries>
元素,将您要查找的第三方应用列入白名单,或者 - 请求获得
MANAGE_ALL_APPS
权限(并有可能导致您的应用被Play商店禁止)
对于您来说,the <queries>
element可能是一个安全的选择,假设您要查找的应用程序ID列表在编译时是已知的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。