【发布时间】:2021-05-09 20:34:38
【问题描述】:
我需要在我的应用程序中进行一些重要的更新,我想确保我的应用程序中的所有用户都会下载它。
为此,我使用了应用内更新,我从here 那里得到了答案
基本上我做的如下:
在build.gradle 中添加了以下内容:
implementation 'com.google.android.play:core:1.10.0'
在我的课堂内我添加了:
private AppUpdateManager mAppUpdateManager;
private static final int RC_APP_UPDATE = 11;
@Override
protected void onStart() {
super.onStart();
mAppUpdateManager = AppUpdateManagerFactory.create( this );
Task<AppUpdateInfo> appUpdateInfoTask = mAppUpdateManager.getAppUpdateInfo();
appUpdateInfoTask.addOnSuccessListener( appUpdateInfo -> {
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
&& appUpdateInfo.isUpdateTypeAllowed( AppUpdateType.IMMEDIATE )) {
try {
mAppUpdateManager.startUpdateFlowForResult( appUpdateInfo, AppUpdateType.IMMEDIATE, this, RC_APP_UPDATE );
Log.d( "TEST", "HERE1" );
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
Log.d( "TEST", "HERE2" );
}
} else if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
Log.d( "TEST", "HERE3" );
}
} );
}
InstallStateUpdatedListener installStateUpdatedListener = new
InstallStateUpdatedListener() {
@Override
public void onStateUpdate(InstallState state) {
if (state.installStatus() == InstallStatus.INSTALLED) {
if (mAppUpdateManager != null) {
mAppUpdateManager.unregisterListener( installStateUpdatedListener );
Log.d( "TEST", "HERE4" );
}
}
}
};
@Override
protected void onResume() {
super.onResume();
mAppUpdateManager.getAppUpdateInfo().addOnSuccessListener( appUpdateInfo -> {
if (appUpdateInfo.updateAvailability()
== UpdateAvailability.DEVELOPER_TRIGGERED_UPDATE_IN_PROGRESS) {
try {
mAppUpdateManager.startUpdateFlowForResult(
appUpdateInfo, AppUpdateType.IMMEDIATE, DiscoverActivity.this, RC_APP_UPDATE );
Log.d( "TEST", "HERE5" );
} catch (IntentSender.SendIntentException e) {
e.printStackTrace();
Log.d( "TEST", "HERE6" );
}
}
} );
}
@Override
protected void onStop() {
if (mAppUpdateManager != null) {
mAppUpdateManager.unregisterListener(installStateUpdatedListener);
Log.d( "TEST", "HERE7" );
}
super.onStop();
}
现在,我已经使用内部测试来确保它可以正常工作,而且当我打开应用程序时,它确实显示了我需要更新应用程序的屏幕。更新后,应用会重新打开,但会要求我再次更新,以此类推。
为什么会这样?据我了解,unregisterListener 应该已经解决了。
通过调试代码,我看到它一直输入“HERE1”和“HERE7”,并且没有输入任何侦听器或类似的东西。从另一个测试来看,它永远不会将 state.installStatus() 更改为 INSTALLED 并且在日志中它说:
InstallState{installStatus=5, bytesDownloaded=0, totalBytesToDownload=0, installErrorCode=-100, packageName=com.xx.yy}
我该如何解决?
谢谢
【问题讨论】:
标签: java android in-app-update