#android #android-studio #kotlin #google-play
Вопрос:
Я пытаюсь реализовать обновление в приложении в своем приложении, чтобы при появлении нового обновления пользователь мог его увидеть.
Я тщательно выполнил все перечисленные здесь шаги — https://developer.android.com/guide/playcore/in-app-updates/kotlin-java
Но по некоторым причинам диалоговое окно для обновления не отображается…
Активность.тыс. т
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.Theme_DirectMusicPlayer)
super.onCreate(savedInstanceState)
initViews()
setContentView(binding.root)
}
private fun initViews(){
checkForUpdate()
}
private fun checkForUpdate(){
appUpdateManager = AppUpdateManagerFactory.create(this)
// Returns an intent object that you use to check for an update.
val appUpdateInfoTask = appUpdateManager.appUpdateInfo
// Checks that the platform will allow the specified type of update.
appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
{
// Request the update.
appUpdateManager.startUpdateFlowForResult(
// Pass the intent that is returned by 'getAppUpdateInfo()'.
appUpdateInfo,
// Or 'AppUpdateType.FLEXIBLE' for flexible updates.
AppUpdateType.FLEXIBLE,
// The current activity making the update request.
this,
// Include a request code to later monitor this update request.
Constants.MY_REQUEST_CODE
)
}
else{
Toast.makeText(this, "No update yet", Toast.LENGTH_LONG).show()
}
}
//Create a listener to track request state updates.
installStateUpdatedListener = InstallStateUpdatedListener { state ->
when (state.installStatus()) {
InstallStatus.DOWNLOADING -> {
val bytesDownloaded = state.bytesDownloaded()
val totalBytesToDownload = state.totalBytesToDownload()
//show download progress
}
InstallStatus.DOWNLOADED -> {
//show SnackBar
showInstallSnackBar()
}
InstallStatus.INSTALLED -> {
appUpdateManager.unregisterListener(installStateUpdatedListener)
}
else -> {
//do something
}
}
}
// Before starting an update, register a listener for updates.
appUpdateManager.registerListener(installStateUpdatedListener)
}
private fun showInstallSnackBar(){
Snackbar.make(
findViewById(android.R.id.content),
"An update has just been downloaded.",
Snackbar.LENGTH_INDEFINITE
).apply {
setAction("RESTART") { appUpdateManager.completeUpdate() }
setActionTextColor(ContextCompat.getColor(this@PermissionActivity, R.color.app_name_color))
show()
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == Constants.MY_REQUEST_CODE) {
if (resultCode != AppCompatActivity.RESULT_OK) {
// If the update is cancelled or fails,
// you can request to start the update again
checkForUpdate()
}
}
}
override fun onResume() {
super.onResume()
appUpdateManager
.appUpdateInfo
.addOnSuccessListener { appUpdateInfo ->
// If the update is downloaded but not installed,
// notify the user to complete the update.
if (appUpdateInfo.installStatus() == InstallStatus.DOWNLOADED) {
showInstallSnackBar()
}
}
}
}
Чтобы проверить:
- Я загрузил на тестовый трек (с кодом обновления в приложении)
- Затем я загрузил тот же пакет приложений выше с общедоступной ссылкой
- Затем в своем коде я увеличил код версии до более высокой, чем на шаге 1
- Затем я сгенерировал другой подписанный пакет и загрузил его на тот же внутренний тестовый трек.
- Теперь я скопировал URL-адрес приложения на шаге 4 и посетил его…Там я увидел «Обновление» — что означает, что доступно обновление. (Я не нажимал на обновление в playstore)
- Я закрыл PlayStore и открыл свое приложение…Я думал, что появится диалоговое окно обновления в приложении, но ничего не отображается… Но в playstore написано «Обновить».
Я также очистил кэш и ждал несколько часов, но ничего.
Я также не получаю всплывающее сообщение, в котором я установил «Нет обновления», когда обновления еще нет…Что показывает, что обновление, безусловно, есть…но диалоговое окно обновления от Google не отображается.
Комментарии:
1. та же проблема и здесь. для меня это действительно сработало однажды на одном из моих устройств. с другой стороны, появилось диалоговое окно, но обновление завершилось с некоторой ошибкой, и мне пришлось перезагрузить устройство, чтобы установить его вообще. после этого у меня возникла та же проблема, что и у вас
2. У меня та же проблема, вы нашли решение?