我正在尝试使用AppUpdateManager在应用程序更新API中实现Android。我首先尝试遵循文档,如果您在这里,那么您知道这是行不通的。
所以我读了十几篇教程和博客文章,介绍了如何实现这个功能。我大概90%在那。对我来说,在用户接受更新后,更新被下载,我的侦听器检测到下载完成,并且我显示自己的消息并回调(大多数教程在这一点上使用了一个Toast(吐司),但这不重要)。如果我的用户点击“restart”,这是我在显示的消息的OK端给出的标签,那么我调用AppUpdateManager.CompleteUpdate()。
此时,我从Google Play获得了一个屏幕,显示了一些漂亮的动画,安装进度条完成后,Google屏幕消失,然后我的应用程序重新启动。
问题是它没有html" target="_blank">安装,我可以从我的应用程序版本看出它仍然是以前的版本,而且由于它仍然是以前的版本,appUpdateManager被重新创建,当它检查updateAvailability.update_Available时,它发现(很明显)有一个可用的更新,然后返回整个过程,再次下载它并尝试重新启动应用程序。
我添加了一些日志消息,并检查了是否在onActivityResult中获得RESULT_IN_APP_UPDATE_FAILED,但它返回得很好。
任何人的任何帮助或建议,将是伟大的。
我在MainActivity开始时为appUpdateManager创建一个句柄,如下所示:
private AppUpdateManager appUpdateManager;
我还创建了一个监听器来监视安装状态,因为我正在努力实现一个可灵活的AppUpdateType,比如:
private InstallStateUpdatedListener UPDATE_LISTENER = installState -> {
if (installState.installStatus() == DOWNLOADED) {
Log.d(TAG, "~UPDATE_LISTENER - installStatus is DOWNLOADED");
Utility.displayAlert(UPDATE_READY);
}
Log.d(TAG, "~Error code is: " + installState.installErrorCode());
Log.d(TAG, "~Package name is: " + installState.packageName());
};
在onCreate中,我创建了appUpdateManager,注册了下载侦听器,并添加了addOnSuccessListener,如下所示:
Log.d(TAG, "~updateAppIfAvailable");
// Creates instance of the manager.
appUpdateManager = AppUpdateManagerFactory.create(this);
Log.d(TAG, "~registerListener");
appUpdateManager.registerListener(UPDATE_LISTENER);
appUpdateManager
.getAppUpdateInfo()
.addOnSuccessListener(
appUpdateInfo -> {
// Checks that the platform will allow the specified type of update.
Log.d(TAG, "~updateAvailability is " + appUpdateInfo.updateAvailability());
if ((appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE)
&& appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
// Request the update.
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.FLEXIBLE,
this,
MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
});
我的onActivityResult如下所示:@override protected void onActivityResult(int requestCode,int resultCode,@nullable Intent data){super.onActivityResult(requestCode,resultCode,data);log.d(TAG,“~onActivityResult”);if(requestCode==MY_REQUEST_CODE){switch(resultCode){case activity.result_ok:log.d(TAG,“~User approved Update”);break;
onResume为:
appUpdateManager
.getAppUpdateInfo()
.addOnSuccessListener(
appUpdateInfo -> {
if (appUpdateInfo.updateAvailability()
== UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
// If an in-app update is already running, resume the update.
try {
Log.d(TAG, "~onResume appUpdateManager is calling startUpdateFlowForResult");
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.FLEXIBLE,
this,
MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
}
});
最后,当我显示警报时(如果您想要的话,这可能是一个祝酒词),我有一个取消和一个重启选项,并带有一条消息,上面写着“更新下载已完成”(update download is complete)。
如果用户按下“restart”选项,那么它会调用这个updateAndRestart()方法:
private void updateAndRestart() {
Log.d(TAG, "~updateAndRestart");
Log.d(TAG, "~Completing app update.");
if (appUpdateManager != null) {
appUpdateManager.completeUpdate();
Log.d(TAG, "~unregisterListener");
appUpdateManager.unregisterListener(UPDATE_LISTENER);
}
}
好吧,已经一个星期了,显然我把整个SO社区都难倒了。:)说真的,在过去的一周里,我一直在阅读Android文档和教程,我没有其他答案,所以我要说的是,Google Update API还没有准备好投入生产。
我找到了另一种解决办法。它是一种组合
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://play.google.com/store/apps/details?id=com.example.android"));
intent.setPackage("com.android.vending");
startActivity(intent);
我在Play Store中有一个应用程序。 现在,我需要用更新的版本来更新它。在将其推送到Playstore之前,我想我会用APK检查迁移。 我从Playstore安装了现有版本。现在,我试图安装最新的(签名)apk。但它说,应用程序无法安装。 这个确切的案例正在与Playstore合作。我尝试了发行版。它工作正常。 我错过什么了吗。。? 提前谢谢
我有一个android的设备,我在上面调试应用程序。在我生成签名apk后,我卸载了现有的调试应用程序,尝试安装签名apk,但我得到了应用程序未安装的错误。我安装在一个没有调试应用程序安装的新设备上,看起来还可以。我尝试清除应用程序数据并卸载,但没有工作。 图像错误
我知道有“重复”这一点,但他们都说同样的事情,我已经试过了。< br >我已经将SHA1和SHA256密钥添加到firebase项目中。< br > OTP验证在调试模式下或当我手动安装release apk时运行良好。但它不会当应用程序从play store下载时,OTP根本不会发送。
我正在尝试获取iOS应用程序中的用户位置。我首先在我的项目中包括了corelocation框架。然后点击一个按钮,我调用核心位置api,如下所示。当我试图将其安装到设备中时,核心位置从不请求用户权限。当我尝试在单击按钮时获取位置时,我得到的KClauthorizationStatusNotDetected为AuthorizationStatus。请帮我做这件事。我不知道发生了什么事。 这是我的sh
我在Udemy上学习“现代React with Redux课程”,讲师要求先安装NodeJs,然后安装“npm安装-g创建React应用程序”,当我尝试运行此命令时,我遇到一个错误:- 然后我讨论了有关stackoverflow的一些问题,其中有人建议运行以下命令:- 我得到了: 然后我运行 再次命令,但仍然得到相同的错误,任何解决方案/建议?
我有一个已经在商店中的应用程序,现在我正忙着做一些更改,我想在提交更新到商店之前在设备上测试。 更改后,我为iOS发送了一个调试版本。当我尝试在我的设备上安装应用程序时,什么也没发生,甚至没有显示codename-one.appspot.com想安装“应用程序名称”的常规对话框。 我还尝试在我的苹果电脑上通过iTunes安装应用程序,但安装失败。 我在使用iFunbox时也遇到了一个错误。 我的应