Поведение 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);