2011-09-27 4 views
24

Próbuję utworzyć wyskakujące okno dialogowe, które będzie wyświetlane po pierwszym uruchomieniu aplikacji, które powiadomi użytkowników o nowych zmianach w aplikacji. Mam więc okienko dialogowe: tak:Android: Pierwsze okienko dialogowe wyskakującego polecenia

new AlertDialog.Builder(this).setTitle("First Run").setMessage("This only pops up once").setNeutralButton("OK", null).show(); 

Po ich odrzuceniu nie wróci do następnej aktualizacji lub nie zainstaluje ponownie aplikacji.

Jak ustawić powyższy kod okna dialogowego tylko raz?

+0

możliwe duplikat [Sprawdź, czy aplikacja Android jest po raz pierwszy używany] (http://stackoverflow.com/questions/4636141/determine-if-android-app-is-the-first-time-used) –

Odpowiedz

69

Użyj wartości do zapisania wartości isFirstRun i sprawdź aktywność uruchamiania względem tej wartości.

Jeśli wartość jest ustawiona, nie ma potrzeby wyświetlania okna dialogowego. Jeśli jeszcze, wyświetl okno dialogowe i zapisz flagę isFirstRun w SharedPreferences.

Przykład:

public void checkFirstRun() { 
    boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("isFirstRun", true); 
    if (isFirstRun){ 
     // Place your dialog code here to display the dialog 

     getSharedPreferences("PREFERENCE", MODE_PRIVATE) 
      .edit() 
      .putBoolean("isFirstRun", false) 
      .apply(); 
    } 
} 
+5

Ta preferencja będzie "false" po aktualizacji – SpongeBobFan

+2

, aby to działało, musiałem zmienić 'getSharedPreference' na' getSharedPreferences' – gMale

+0

Jaki powinien być wpis w manifeście, aby to działało? – Sndn

2

Nie ma rzeczywistego pytania, ale zakładam, że chcesz wiedzieć, jak osiągnąć zamierzony efekt. W takim przypadku należy użyć obiektu SharedPreference, aby uzyskać "pierwszy rozruch" boolean, który domyślnie jest ustawiony na wartość true, i ustawić go na wartość false tuż po pierwszym uruchomieniu.

19

Chociaż ogólna idea z pozostałych odpowiedzi jest dźwięk, należy zachować we wspólnych preferencji nie wartość logiczną, ale znacznik czasu, kiedy ostatni raz pierwszy bieg się nie stało, lub ostatnią wersję aplikacji, dla której to się stało.

Powodem tego jest prawdopodobnie pierwsze uruchomienie okna dialogowego także, gdy aplikacja została uaktualniona. Jeśli zachowasz tylko wartość boolowską, po aktualizacji aplikacji wartość nadal będzie prawdziwa, więc nie ma sposobu, aby twój kod kodowy wiedział, czy powinien uruchomić go ponownie, czy nie.

+3

Czy możesz podać fragment z uzasadnieniem? dzięki za wskazanie tego, bardzo dobrze wiedzieć. – TryTryAgain

3

Używam tego do wyświetlenia okna pomocy przy pierwszym uruchomieniu. Nie chcę tego po aktualizacji. To lepiej pasuje do dziennika zmian.

private void doFirstRun() { 
     SharedPreferences settings = getSharedPreferences(PREFS_NAME, MODE_PRIVATE); 
     if (settings.getBoolean("isFirstRun", true)) { 
      showDialog(DIALOG_HELP); 
      SharedPreferences.Editor editor = settings.edit(); 
      editor.putBoolean("isFirstRun", false); 
      editor.commit(); 
     } 
} 
7

W ten sposób można wprowadzić zmiany między nową instalacją a aktualizacją.

String StoredVersionname = ""; 
String VersionName; 
AlertDialog LoginDialog; 
AlertDialog UpdateDialog; 
AlertDialog FirstRunDialog; 
SharedPreferences prefs; 

public static String getVersionName(Context context, Class cls) { 
    try { 
     ComponentName comp = new ComponentName(context, cls); 
     PackageInfo pinfo = context.getPackageManager().getPackageInfo(
       comp.getPackageName(), 0); 
     return "Version: " + pinfo.versionName; 
    } catch (android.content.pm.PackageManager.NameNotFoundException e) { 
     return null; 
    } 
} 

public void CheckFirstRun() { 
    VersionName = MyActivity.getVersionName(this, MyActivity.class); 
    prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    StoredVersionname = (prefs.getString("versionname", null)); 
    if (StoredVersionname == null || StoredVersionname.length() == 0){ 
     FirstRunDialog = new FirstRunDialog(this); 
     FirstRunDialog.show(); 
    }else if (StoredVersionname != VersionName) { 
     UpdateDialog = new UpdateDialog(this); 
     UpdateDialog.show(); 
    } 
    prefs.edit().putString("versionname", VersionName).commit(); 
} 
Powiązane problemy