1

我已经实现了在更新可用时显示灵活的应用内更新对话框的功能。但是当用户选择不更新应用程序并重新启动应用程序时,对话框再次出现。在用户选择不安装更新几天后,如何再次显示该对话框?

4

1 回答 1

1

您可以在 Android 中使用 SharedPreferences。基本上,当您要求灵活更新时,将日期保存到 SharedPreferences 并在用户使用应用程序决定何时要求下一次更新时将当前日期与存储在共享首选项中的日期进行比较。

我建议您只询问一次,因为多次询问会惹恼您的用户。

 else if (checkVersion.android_current_version!! > versionName.toLong()) {
                    if (SharedPreference(this@WelcomeActivity).getInt(KEY_UPDATE_ASKED) != (checkVersion.android_current_version as Long).toInt()) {
                        appUpdateManager = AppUpdateManagerFactory.create(this@WelcomeActivity)
                        val appUpdateInfoTask = appUpdateManager!!.appUpdateInfo

                        appUpdateInfoTask.addOnSuccessListener { appUpdateInfo ->
                            if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
                                    && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)) {
                                appUpdateManager!!.startUpdateFlowForResult(
                                        appUpdateInfo,
                                        AppUpdateType.FLEXIBLE,
                                        this@WelcomeActivity,
                                        REQUEST_FLEXIBLE_UPDATE)
                            }
                        }
                    }
                }

这段代码(您需要根据自己的代码进行修改)让我只要 checkVersion.android_current_version(我存储在 Firebase 中的版本,因此我也可以决定隐藏某些版本的 FlexibleUpdates 版本)高于安装在用户手机中的版本。您的用例要求您删除输入条件并检查日期差异,而不是检查之前是否已询问过更新。

SharedPreferences 的辅助类

class SharedPreference(val context: Context) {
    private val PREFS_NAME = "PREFERENCES"
    val sharedPref: SharedPreferences = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)

    fun save(KEY_NAME: String, value: String) {
        val editor: SharedPreferences.Editor = sharedPref.edit()

        editor.putString(KEY_NAME, value)

        editor.apply()
    }


    fun getString(KEY_NAME: String): String? {

        return sharedPref.getString(KEY_NAME, null)
    }
}
于 2020-05-26T17:29:06.330 回答