Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从Google Play Store安装应用程序时的onActivityResult回调_Android_Android Intent_Callback_Installation_Google Play - Fatal编程技术网

Android 从Google Play Store安装应用程序时的onActivityResult回调

Android 从Google Play Store安装应用程序时的onActivityResult回调,android,android-intent,callback,installation,google-play,Android,Android Intent,Callback,Installation,Google Play,我想简短的问题是:在安装/不安装Google Play Store中的应用程序后,是否有可能通过onActivityResult获得有效的回调 我可以将用户发送到应用程序(假设他们有Google Play Store并使用url中的软件包名称),其中包括: 我想在这里得到结果: @覆盖 ActivityResult上的公共void(int请求代码、int结果代码、意图数据){ super.onActivityResult(请求代码、结果代码、数据); if(requestCode==1){ if

我想简短的问题是:在安装/不安装Google Play Store中的应用程序后,是否有可能通过onActivityResult获得有效的回调

我可以将用户发送到应用程序(假设他们有Google Play Store并使用url中的软件包名称),其中包括:

我想在这里得到结果:

@覆盖
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
if(requestCode==1){
if(resultCode==RESULT\u OK){
Log.d(“TAG”,“onActivityResult:用户接受安装”);
}else if(resultCode==RESULT\u取消){
Log.d(“TAG”,“onActivityResult:用户取消了安装”);
}else if(resultCode==RESULT\u FIRST\u USER){
Log.d(“标记”、“onActivityResult:安装失败”);
}
}
}
我更喜欢使用
Intent.ACTION\u INSTALL\u包
,而不是安装
Intent.ACTION\u视图
,但是关于如何使用前者的信息有限。但是,
Intent.ACTION\u INSTALL\u PACKAGE
似乎已从API级别29弃用,因此我也接受使用
PackageInstaller
的解决方案


顺便说一句,我发布的代码是有缺陷的,因为它在返回应用程序时总是返回
resultCode==RESULT\u cancelled

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

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


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

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

几年前,我也在寻找同样的答案。我甚至尝试在执行意图之前获取所有已安装应用程序的列表,然后在一小时后将其与较新的列表进行比较。但即使这样也不是很好的解决方案将其包含在回调中也确实有效,因为请求代码总是会触发,但结果代码是错误的。在接受之前,我将稍等片刻,看看是否发布了其他答案,谢谢您的理解。无论用户重定向到何处,当您按返回应用程序时,您将始终得到取消的结果。即使游戏中不存在应用程序store@ErlendK.H. 如果有助于解决您的问题,请接受答案。
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;
        }
    }