【发布时间】:2012-11-07 05:49:48
【问题描述】:
在我的 android 应用程序中,用户必须通过同意提供其电子邮件 ID 的条款和条件进行注册。如果用户将应用程序升级到下一个版本,我不应该得到协议页面或电子邮件注册窗口。我正在使用全局变量来控制它,但是如果用户将应用程序升级到更新版本,全局变量会被重置,因此用户会再次获得协议页面和注册窗口。那么我该怎么做呢?提前感谢您的帮助。
【问题讨论】:
标签: android versioning upgrade
在我的 android 应用程序中,用户必须通过同意提供其电子邮件 ID 的条款和条件进行注册。如果用户将应用程序升级到下一个版本,我不应该得到协议页面或电子邮件注册窗口。我正在使用全局变量来控制它,但是如果用户将应用程序升级到更新版本,全局变量会被重置,因此用户会再次获得协议页面和注册窗口。那么我该怎么做呢?提前感谢您的帮助。
【问题讨论】:
标签: android versioning upgrade
【讨论】:
你可以使用SharedPreferences
class VersionInfo {
private VersionInfo() {}
private static final String PREF_VERCODE = "VERCODE";
public static final VersionInfo INSTANCE = new VersionInfo();
void setVersionCode(Context ctx, int ver) {
PreferenceManager.getDefaultSharedPreferences(ctx).edit().putInt(PREF_VERCODE, ver).commit();
}
int getVersionInfo(Context ctx) {
PreferenceManager.getDefaultSharedPreferences(ctx).getInt(PREF_VERCODE, 1);
}
}
【讨论】:
我使用这段代码在我的应用程序中显示 ChangeLog 以检测版本是否已更改并相应地显示 ChangeLog。相同的逻辑可用于显示或不显示协议,视情况而定。
这些是我的全局声明:
// FOR STORING VERSION CODE IN SHAREDPREFERENCES
private static final String PRIVATE_PREF = "my_app_name";
private static final String VERSION_KEY = "version_number";
try {
// GET THE PREFERENCE SET FOR THE CHANGELOG
final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
final boolean showChanges = prefs.getBoolean("displayChangelog", false);
PackageInfo pkgInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
// SET THE CURRENT VERSION IN SHAREDPREFERENCES
SharedPreferences sharedPrefs = getSharedPreferences(PRIVATE_PREF, Context.MODE_PRIVATE);
// SAVED VERSION CODE
int savedVersionCode = sharedPrefs.getInt(VERSION_KEY, 0);String.valueOf(savedVersionCode));
// GET NEW VERSION CODE
int currentVersionCode = pkgInfo.versionCode;String.valueOf(currentVersionCode));
Editor editor = sharedPrefs.edit();
editor.putInt(VERSION_KEY, currentVersionCode);
editor.commit();
if (showChanges == false) {
/***** DISPLAY THE CHANGELOG *****/
// DISPLAY DIALOG WHEN THE APPLICATION IS INSTALLED FOR THE FIRST TIME
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("displayChangelog", true);
editor.commit();
} else if (showChanges == true && currentVersionCode > savedVersionCode) {
/***** DISPLAY THE CHANGELOG AFTER AN UPGRADE *****/
// DISPLAY DIALOG CHANGELOG AFTER AN UPGRADE
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("displayChangelog", true);
editor.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
编辑:除此代码外,我还使用Preferences XML 文件为用户提供再次查看 ChangeLog 的能力,并存储用户偏好状态以显示 ChangeLog 在下次运行时。相应的 XML:
<PreferenceCategory
android:key="changeLogOptions"
android:title="Changelog Options" >
<Preference
android:key="changeLog"
android:summary="See what has changed in the current version"
android:title="What\'s New" >
</Preference>
<CheckBoxPreference
android:defaultValue="false"
android:key="displayChangelog"
android:summary="@string/settings_changelog"
android:title="Hide The Changelog" >
</CheckBoxPreference>
</PreferenceCategory>
【讨论】: