繁体   English   中英

从 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解决方案。

顺便说一句,我发布的代码有缺陷,因为它在返回应用程序时总是返回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;
        }
    }

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

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

我不知道你在这里的确切用例,但如果它涉及与推荐相关的工作,那么我建议你看这里 Google Play Install Referrer 可以提供信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM