微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果API30不可用,如何运行Android应用或在PlayStore上安装?

如何解决如果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 11PackageManager上的方法,例如getApplicationInfo()在默认情况下不再起作用。您需要:

  • 不给他们打电话,或者
  • 在清单中添加<queries>元素,将您要查找的第三方应用列入白名单,或者
  • 请求获得MANAGE_ALL_APPS权限(并有可能导致您的应用被Play商店禁止)

对于您来说,the <queries> element可能是一个安全的选择,假设您要查找的应用程序ID列表在编译时是已知的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。