[从Google Play商店安装应用时的onActivityResult回调
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[从Google Play商店安装应用时的onActivityResult回调相关的知识,希望对你有一定的参考价值。
我想简短的问题是:在从Google Play商店安装/未安装应用后,是否可以通过onActivityResult获得有效的回调?
我可以通过以下方式将用户发送到应用(假设他们拥有Google Play商店并使用URL中的程序包名称):
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
marketIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
startActivityForResult(marketIntent, 1);
我想在这里得到结果:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1) {
if (resultCode == RESULT_OK) {
Log.d("TAG", "onActivityResult: user accepted the install");
} else if (resultCode == RESULT_CANCELED) {
Log.d("TAG", "onActivityResult: user cancelled the install");
} else if (resultCode == RESULT_FIRST_USER) {
Log.d("TAG", "onActivityResult: failed to install");
}
}
}
我希望使用Intent.ACTION_INSTALL_PACKAGE
而不是Intent.ACTION_VIEW
进行安装,但是有关如何使用前者的信息是有限的。但是,Intent.ACTION_INSTALL_PACKAGE
似乎已从API级别29弃用,因此我也接受使用PackageInstaller
的解决方案。
顺便说一下,我发布的代码有缺陷,因为返回到应用程序时,它总是返回resultCode == RESULT_CANCELED
。
一种可能的解决方案是,您必须在将用户重定向到Playstore之前,以编程方式检查以下特定包名称,然后确定是否已安装该应用程序。然后在OnActivityResult回调中再次使用以下方法进行检查。
private boolean isAppInstalled(String packageName) {
PackageManager pm = getPackageManager();
try {
pm.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES);
return pm.getApplicationInfo(packageName, 0).enabled;
}
catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
return false;
}
}
简单的答案是-否,不可能
如果您重定向的用户安装了应用程序,则无法获得回调
我在这里不知道您的确切用例,但是如果涉及涉及推荐的工作,那么我建议您看一下here。 Google Play安装引荐来源网址可以提供信息
以上是关于[从Google Play商店安装应用时的onActivityResult回调的主要内容,如果未能解决你的问题,请参考以下文章
Google PlayGoogle Play 服务框架安装 ( 安装 Google Play 服务框架 | 安装 Google Play 服务 | 安装 Google Play 商店 )