如果 API30 不可用,如何 运行 Android 应用程序或在 PlayStore 上安装?
How to run Android app or install on PlayStore if unavailable for API30?
我有一个 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>
元素添加到您的清单中,将您希望查找的 third-party 应用列入白名单,或者
- 请求
MANAGE_ALL_APPS
权限(以及 运行 您的应用程序被 Play 商店禁止的风险)
在您的情况下,the <queries>
element 可能是一个安全的选择,假设您要查找的应用程序 ID 列表在编译时是已知的。
我有一个 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>
元素添加到您的清单中,将您希望查找的 third-party 应用列入白名单,或者 - 请求
MANAGE_ALL_APPS
权限(以及 运行 您的应用程序被 Play 商店禁止的风险)
在您的情况下,the <queries>
element 可能是一个安全的选择,假设您要查找的应用程序 ID 列表在编译时是已知的。