从 Google Play 商店安装应用程序时的 onActivityResult 回调
onActivityResult callback when installing an app from Google Play Store
我想这个简短的问题是:在安装/不安装来自 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
的解决方案。
顺便说一句,我发布的代码有缺陷,因为它总是 returns resultCode == RESULT_CANCELED
返回应用程序时。
简单的答案是 - 不,不可能
如果您重定向的用户安装了应用程序,您将无法获得回调
我不知道你在这里的确切用例,但如果它涉及与推荐相关的工作,那么我建议你看看 here。 Google Play Install Referrer 可以提供信息
一个可能的解决方案是,在将用户重定向到 Playstore 之前,您必须以编程方式检查特定包名称的以下方法是否安装了该应用程序,或者 not.And 然后在 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;
}
}
我想这个简短的问题是:在安装/不安装来自 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
的解决方案。
顺便说一句,我发布的代码有缺陷,因为它总是 returns resultCode == RESULT_CANCELED
返回应用程序时。
简单的答案是 - 不,不可能
如果您重定向的用户安装了应用程序,您将无法获得回调
我不知道你在这里的确切用例,但如果它涉及与推荐相关的工作,那么我建议你看看 here。 Google Play Install Referrer 可以提供信息
一个可能的解决方案是,在将用户重定向到 Playstore 之前,您必须以编程方式检查特定包名称的以下方法是否安装了该应用程序,或者 not.And 然后在 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;
}
}