如何解决Android 应用内更新不断要求更新
我需要在我的应用程序中进行一些重要的更新,我想确保我的应用程序中的所有用户都会下载它。
那里得到了答案我所做的基本上如下:
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,discoverActivity.this,"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}
我该如何解决?
谢谢
解决方法
停止注册监听器,同时没有任何更新;这进入分支appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
:
mAppUpdateManager.registerListener(installStateUpdatedListener);
为此应用注册一个监听器,用于接收自我更新操作的状态变化。
取消注册监听器的时间通常是InstallStatus.INSTALLED
:
appUpdateInfo.installStatus() == InstallStatus.INSTALLED
见https://developer.android.com/guide/playcore/in-app-updates/kotlin-java
或https://gist.github.com/saikiran91/6788ad4d00edca30dad3f51aa47a4c5c
还应始终最后调用 super.onStop()
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。