2011-09-27 24 views
24

Sto tentando di creare una finestra di dialogo popup che viene visualizzata solo dopo la prima esecuzione dell'app che avviserà gli utenti delle nuove modifiche nell'app. Così ho un popup finestra come questa:Android: finestra di dialogo popup della prima esecuzione

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

Una volta che lo liquidano, non tornerà fino al prossimo aggiornamento oppure reinstallare l'app.

Come si imposta il codice di dialogo sopra riportato per essere eseguito una sola volta?

+0

possibile duplicato del [Determinare se Android app è la prima volta utilizzato] (http://stackoverflow.com/questions/4636141/determine-if-android-app-is-the-first-time-used) –

risposta

69

Utilizzare SharedPreferences per memorizzare il valore isFirstRun e controllare l'attività di avvio rispetto a tale valore.

Se il valore è impostato, non è necessario visualizzare la finestra di dialogo. In caso contrario, visualizzare la finestra di dialogo e salvare il flag isFirstRun in SharedPreferences.

Esempio:

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

questa preferenza verrà 'false' dopo l'aggiornamento – SpongeBobFan

+2

per far funzionare tutto questo, avevo bisogno di cambiare' getSharedPreference' a 'getSharedPreferences' – gMale

+0

Quale dovrebbe essere l'ingresso nel manifesto per ottenere questo lavoro? – Sndn

2

Non c'è una domanda reale, ma presumo che vogliate sapere come ottenere l'effetto desiderato. In tal caso, utilizzare un oggetto SharedPreference per ottenere una "prima esecuzione" booleana che è impostata su true e impostarla su false subito dopo la prima esecuzione.

19

Mentre l'idea generale delle altre risposte è sana, si dovrebbe tenere nelle preferenze condivisi non un valore booleano, ma un timestamp di quando è stata l'ultima volta che la prima esecuzione era successo, o l'ultima versione dell'app per cui è successo.

La ragione di ciò è che probabilmente si vorrà eseguire la prima finestra di dialogo di esecuzione anche quando l'app è stata aggiornata. Se mantieni solo un valore booleano, nell'aggiornamento delle app, il valore sarà ancora true, quindi non è possibile che il tuo codice code sappia se deve essere eseguito di nuovo o meno.

+3

si può dare un frammento di come con la tua giustificazione? grazie per averlo sottolineato, molto buono a sapersi. – TryTryAgain

3

Lo uso per visualizzare una finestra di dialogo di aiuto al primo avvio. Non voglio che questo venga mostrato dopo un aggiornamento. Questo è più adatto per un changelog.

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

In questo modo è possibile fare la differenza tra una nuova installazione e un aggiornamento.

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