2011-08-18 13 views
5

Używam preferencji współdzielonych do przechowywania liczby uruchomień mojej aplikacji. Dopiero przy pierwszym uruchomieniu wyświetlany jest komunikat powitalny informujący użytkownika o nowych funkcjach i zmianach w tej wersji.Zachowanie SharedPreferences na Update/Uninstall

Jednak po zaadaptowaniu aplikacji lub uaktualnieniu aplikacji nie mogę usunąć poprzednich udostępnionych preferencji. Chciałbym uzyskać okno dialogowe, gdy ponownie zainstaluję oprogramowanie lub zaktualizuję je.

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

jak ty najpierw stworzył sharedPreference .. – ngesh

Odpowiedz

14

Brak haka, za pomocą którego można wymazać udostępnione preferencje w przypadku aktualizacji.

Nikolay ma rację, możesz zapisać numer wersji swojej aplikacji. Porównaj to z aktualnym numerem wersji.

Aby uzyskać aktualny numer wersji połączenia:

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

Aby uzyskać więcej informacji na temat tego, co informacja jest dostępna w następujących informacji pakietu zapoznania się z dokumentacją dotyczącą PackageInfo i PackageManager.

+0

Dzięki za opracowanie więcej informacji :) Myślę, że to jest to, czego potrzebuję;) –

1

Jeśli masz nie ustawiony dontShowagin dostaniesz fałszywe domyślnie .Tak chcesz pokazać okno i następnym razem not.So wystarczy zmienić wartość zamiast true tak, że w przyszłym czas to działa.Również zwiększasz licznik bez faktycznego zwiększania go.Używając +1 z poprzednim.

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); 
+0

To nie rozwiąże problemu pokazywania okna ponownie po aktualizacji aplikacji. – Janusz

11

Zamiast zapisywania boolean zapisać numer wersji aplikacji. Jeśli numer wersji bieżącej aplikacji jest wyższy (zaktualizowany), pokaż okno dialogowe i zaktualizuj numer.

+0

Dlaczego nie myślałem o tym wcześniej: P niesamowite. bardzo dziękuję :) –

+0

Chociaż rozwiązanie jest proste, oczekuję, że Android SDK doda prosty haczyk, jak w przypadku aktualizacji DB, aby uniknąć wielu błędów aktualizacji i zwiększyć niezawodność (na przykład można zapomnieć o tym priorytecie i wyczyścić preferencje w niektórych punkt ...) –

Powiązane problemy