Android 从Google Play Store安装应用程序时的onActivityResult回调
我想简短的问题是:在安装/不安装Google Play Store中的应用程序后,是否有可能通过onActivityResult获得有效的回调 我可以将用户发送到应用程序(假设他们有Google Play Store并使用url中的软件包名称),其中包括: 我想在这里得到结果: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
@覆盖
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;
}
}