应用内更新重新启动过时版本而不是新安装的版本
in-app update restarting the obsolete version instead of the newly installed version
我想实现应用内更新。使用以下代码,它正确提示用户要求他同意更新,下载代码并安装。但随后系统会重新启动 先前安装的 版本的应用程序,并再次执行更新过程。以下代码有什么问题?
在onCreate()
方法中:
appUpdateManager = AppUpdateManagerFactory.create(this);
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (mPrefs == null) {
mPrefs = getSharedPreferences("******" + appName, Context.MODE_PRIVATE);
}
int updateRequestCounter = mPrefs.getInt("updateRequestCounter", 0);
if ((updateRequestCounter == 0) || (updateRequestCounter == 5) || (updateRequestCounter % 10 == 0)) {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) {
switch (appUpdateInfo.installStatus()) {
case InstallStatus.FAILED: case InstallStatus.REQUIRES_UI_INTENT: case InstallStatus.UNKNOWN:
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
this,
MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
mPrefs.edit().putInt("updateRequestCounter", 0).apply();
} else {
mPrefs.edit().putInt("updateRequestCounter", ++updateRequestCounter).apply();
}
});
不知道这是否可能是原因:我使用这段代码不是 production 版本,而是 internal test 版本应用程序。
您缺少更新安装部分。
您需要致电 appUpdateManger.completeUpdate()
来安装更新。 AppUpdateManager 将为您重新启动应用程序。
在您的应用的发布版本中测试更新安装。
我想实现应用内更新。使用以下代码,它正确提示用户要求他同意更新,下载代码并安装。但随后系统会重新启动 先前安装的 版本的应用程序,并再次执行更新过程。以下代码有什么问题?
在onCreate()
方法中:
appUpdateManager = AppUpdateManagerFactory.create(this);
Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> {
if (mPrefs == null) {
mPrefs = getSharedPreferences("******" + appName, Context.MODE_PRIVATE);
}
int updateRequestCounter = mPrefs.getInt("updateRequestCounter", 0);
if ((updateRequestCounter == 0) || (updateRequestCounter == 5) || (updateRequestCounter % 10 == 0)) {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE) {
switch (appUpdateInfo.installStatus()) {
case InstallStatus.FAILED: case InstallStatus.REQUIRES_UI_INTENT: case InstallStatus.UNKNOWN:
try {
appUpdateManager.startUpdateFlowForResult(
appUpdateInfo,
AppUpdateType.IMMEDIATE,
this,
MY_REQUEST_CODE);
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
mPrefs.edit().putInt("updateRequestCounter", 0).apply();
} else {
mPrefs.edit().putInt("updateRequestCounter", ++updateRequestCounter).apply();
}
});
不知道这是否可能是原因:我使用这段代码不是 production 版本,而是 internal test 版本应用程序。
您缺少更新安装部分。
您需要致电 appUpdateManger.completeUpdate()
来安装更新。 AppUpdateManager 将为您重新启动应用程序。
在您的应用的发布版本中测试更新安装。