Поведение SharedPreferences при обновлении / удалении - PullRequest
5 голосов
/ 18 августа 2011

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

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

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 ]

15 голосов
/ 18 августа 2011

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

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

Чтобы получить номер текущей версии, звоните:

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

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

11 голосов
/ 18 августа 2011

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

1 голос
/ 18 августа 2011

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

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

1 голос
/ 18 августа 2011

Если вы не установили 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...