Поведение SharedPreferences при обновлении / удалении

Я использую общие настройки для хранения количества запусков моего приложения. Только при первом запуске я отображаю приветственное сообщение, рассказывающее пользователю о новых функциях и изменениях в этой версии.

Но поскольку я поглощен переустановкой приложения или обновлением приложения, я не могу удалить предыдущие общие настройки. Я хотел бы получить диалоговое окно, когда я переустановить программное обеспечение или обновить его тоже.

AppLauncher

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();
    }
}

4 ответа

Решение

Нет никакого хука, который вы можете использовать для удаления общих настроек в случае обновления.

Николай прав, вы можете сохранить номер версии вашего приложения. И сравните его с текущим номером версии.

Для получения номера текущей версии звоните:

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

Для получения дополнительной информации о том, какая информация доступна в информации о пакете, прочитайте Документацию по PackageInfo и PackageManager.

Вместо сохранения boolean сохранить номер версии приложения. Если номер версии текущего приложения выше (обновлен), покажите диалоговое окно и обновите номер.

Попробуйте послушать это содержание:

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

Если вы не установили 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);
Другие вопросы по тегам