【问题标题】:SharedPreferences behaviour on Update/Uninstall更新/卸载上的 SharedPreferences 行为
【发布时间】:2011-10-29 12:40:18
【问题描述】:

我正在使用共享首选项来存储我的应用程序已启动的次数。只有在第一次启动时,我才会显示一条欢迎消息,告诉用户该版本的新功能和更改。

但是当我专注于重新安装应用程序或升级应用程序时,我无法删除以前的共享首选项。我想在重新安装软件或升级软件时得到对话框。

应用启动器

public class AppLauncher {
    static long launch_count = 0;
    private static boolean isLaunch = false;

    public static void app_launched(Context mContext) {
        System.out.println("I m in AppLauncher");
        SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
        if (prefs.getBoolean("dontshowagain", false)) {
            return;
        }

        SharedPreferences.Editor editor = prefs.edit();

        // Increment launch counter

        launch_count = prefs.getLong("launch_count", 0);
        editor.putLong("launch_count", launch_count);

        System.out.println("launch_count=" + launch_count);
        if (launch_count == 0 || launch_count == 1) {
            // showLaunchDialog(mContext);
            isLaunch = true;
        }
        if (isLaunch == true) {
            showLaunchDialog(mContext);
            isLaunch = false;
        }
        editor.commit();
    }

    public static void showLaunchDialog(Context mcontext) {
        final Dialog dialog = new Dialog(mcontext);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setContentView(R.layout.whatsnew);

        Button dismisButton = (Button) dialog.findViewById(R.id.dismisButtom);
        System.out.println("inside dialog_started");
        dismisButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                dialog.dismiss();
            }
        });
        dialog.show();
    }
}

【问题讨论】:

  • 你是如何第一次创建 sharedPreference..

标签: android sharedpreferences


【解决方案1】:

如果你没有设置 dontShowagin,你会默认得到 false 。所以你想显示对话框,下一次不显示。所以只需将值更改为 true 以便下次它可以工作。另外你正在增加计数器而不实际增加它。使用 +1 与前一个。

SharedPreferences prefs = mContext.getSharedPreferences("apprater", 0);
            if (prefs.getBoolean("dontshowagain", false)) {
                return;
            }

            SharedPreferences.Editor editor = prefs.edit();

            // Increment launch counter

            editor.putBoolean("dontShowagain",true);
            launch_count = prefs.getLong("launch_count", 0)+1;
            editor.putLong("launch_count", launch_count);

【讨论】:

  • 这并不能解决应用更新后再次显示对话框的问题。
【解决方案2】:

不要保存boolean,而是保存应用的版本号。如果当前应用的版本号更高(更新),请显示您的对话框并更新版本号。

【讨论】:

  • 虽然解决方案很简单,但我希望 Android SDK 添加一个简单的钩子,例如用于 DB 升级,以避免大量升级错误并提高鲁棒性(例如,可以忘记这个首选项并清除首选项在某些时候...)
【解决方案3】:

没有任何挂钩可用于在更新时删除共享首选项。

Nikolay 说得对,您可以保存应用的版本号。并将其与当前版本号进行比较。

获取当前版本号调用:

this.getPackageManager().getPackageInfo(this.getPackageName(), 0).versionCode

有关包信息中可用信息的更多信息,请阅读PackageInfoPackageManager 上的文档。

【讨论】:

  • 感谢您详细说明更多信息 :) 我认为这是我需要的 ;)
【解决方案4】:

尝试听这个 Intents:

ACTION_PACKAGE_ADDED
ACTION_PACKAGE_CHANGED
ACTION_PACKAGE_DATA_CLEARED
ACTION_PACKAGE_FIRST_LAUNCH
ACTION_PACKAGE_INSTALL
ACTION_PACKAGE_REMOVED
ACTION_PACKAGE_REPLACED
ACTION_PACKAGE_RESTARTED

更多信息:http://developer.android.com/reference/android/content/Intent.html#ACTION_PACKAGE_ADDED

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-30
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-19
    相关资源
    最近更新 更多