[从Google Play商店安装应用时的onActivityResult回调

问题描述 投票:0回答:2

我想简短的问题是:在从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

android android-intent callback installation google-play
2个回答
1
投票

一种可能的解决方案是,您必须在将用户重定向到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;
        }
    }

0
投票

简单的答案是-否,不可能

如果您重定向的用户安装了应用程序,则无法获得回调

我在这里不知道您的确切用例,但是如果涉及涉及推荐的工作,那么我建议您看一下here。 Google Play安装引荐来源网址可以提供信息

© www.soinside.com 2019 - 2024. All rights reserved.