gpt4 book ai didi

android - 更改升级时的默认首选项

转载 作者:太空狗 更新时间:2023-10-29 13:11:59 26 4
gpt4 key购买 nike

在我的应用程序中,我有以下代码告诉我某项功能是否默认启用:

public boolean getFeatureEnabled()
{
return mPrefs.getBoolean("FEATURE_ENABLED", DEFAULT_ENABLED);
}

仅当用户从 UI 更改设置时,此首选项才会被覆盖。所以默认情况下,它从 DEFAULT_ENABLED 中获取值,这是某处的类变量。

在当前版本中,DEFAULT_ENABLEDtrue,但在我的应用程序的下一个版本中将为 false

问题是更新后,使用上面的代码,没有从 UI 更改默认设置的老用户将禁用他们的功能 - 我想避免这种情况。

关于如何处理这个问题有什么建议吗?

最佳答案

据我所知,您有一项默认启用的功能,但此默认设置从未写入 SharedPreferences 除非用户明确更改。现在您希望默认情况下禁用该功能,但不影响已经启用它的用户的行为。

我可以想到 3 个选项:

选项 1 如果您已经保存了最后一个版本,您可以在迁移逻辑中检查:

private void migratePreferences(Context context) {

SharedPreferences prefs = context.getSharedPreferences("your_preference_file", MODE_PRIVATE);

int lastKnownVersionCode = (prefs.getInt("LAST_INSTALLED_VERSION", BuildConfig.VERSION_CODE);
prefs.edit().putInt("LAST_INSTALLED_VERSION", BuildConfig.VERSION_CODE).apply();

//this is the old featureEnabled check
boolean oldPreferenceValue = prefs.getBoolean("FEATURE_ENABLED", true);

boolean newPreferenceValue;
if (prefs.contains("FEATURE_ENABLED")) {
//the feature was modified by the user so respect their preference
newPreferenceValue = prefs.getBoolean("FEATURE_ENABLED", false);
} else if (lastKnownVersionCode == BUGGY_VERSION_WITH_FEATURE_ENABLED_BY_DEFAULT) {
//the user is updating from the buggy version.
// this check could include a range of versions if you've released several buggy versions.
// this is also where option 2 would be inserted
newPreferenceValue = oldPreferenceValue;
} else {
//the new default that will apply to fresh installs
newPreferenceValue = false;
}

//save the preference
prefs.edit().putBoolean("FEATURE_ENABLED", newPreferenceValue).apply();
}

然而,这取决于您已经在您的应用程序启动代码中的某处调用此方法。

选项 2 如果您不这样做,仍有希望。您可以使用给出的答案检查这是否是您的第一次安装 in this StackOverflow answer

选项 3 您可以发布应用的中间版本,其行为与现在相同,但将未保存的默认设置保存在 SharedPreferences 中。这将为热切的用户保持原样的功能,但您必须等到大部分用户更新后才能发布所需的行为。

关于android - 更改升级时的默认首选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39509522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com