2011-09-27 16 views
24

Estoy tratando de crear un cuadro de diálogo emergente que solo se muestra después de la primera ejecución de la aplicación que alertará a los usuarios de los nuevos cambios en la aplicación. Así que tengo una ventana emergente de diálogo como este:Android: primer diálogo emergente de ejecución

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

Una vez que la despiden, no va a volver hasta la próxima actualización o volver a instalar la aplicación.

¿Cómo puedo configurar el código de diálogo de arriba para que se ejecute solo una vez?

+0

posible duplicado de [Determinar si la aplicación androide es la primera vez que se usa] (http://stackoverflow.com/questions/4636141/determine-if-android-app-is-the-first-time-used) –

Respuesta

69

Use SharedPreferences para almacenar el valor isFirstRun, y compruebe su actividad de inicio con ese valor.

Si se establece el valor, no es necesario mostrar el cuadro de diálogo. Si no, muestre el cuadro de diálogo y guarde el indicador isFirstRun en SharedPreferences.

Ejemplo:

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

Esta preferencia será 'false' después de la actualización – SpongeBobFan

+2

para que esto funcione, necesitaba cambiar' getSharedPreference' a 'getSharedPreferences' – gMale

+0

¿Cuál debería ser la entrada en el manifiesto para que funcione? – Sndn

2

No hay una pregunta real, pero supongo que quiere saber cómo lograr el efecto deseado. Si ese es el caso, utilice un objeto SharedPreference para obtener una 'primera ejecución' booleana que por defecto es verdadera, y establézcala en falso justo después de la primera ejecución.

19

Si bien la idea general de las otras respuestas es sonido, usted debe tener en las preferencias compartidas no un valor lógico, pero una marca de tiempo de cuándo fue la última vez que la primera carrera había sucedido, o la última versión de la aplicación para la que sucedió.

La razón de esto es que probablemente desee ejecutar el primer diálogo de ejecución también cuando la aplicación se haya actualizado. Si solo conservas un booleano, al actualizar la aplicación, el valor seguirá siendo verdadero, por lo que no hay forma de que tu código de código sepa si debe volver a ejecutarse o no.

+3

¿puede dar un fragmento como con su justificación? gracias por señalar esto, muy bueno saberlo. – TryTryAgain

3

Utilizo esto para mostrar un cuadro de diálogo de ayuda en la primera ejecución. No quiero que esto se muestre después de una actualización. Eso es más adecuado para un registro de cambios.

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

Así puede marcar la diferencia entre una nueva instalación y una actualización.

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(); 
} 
Cuestiones relacionadas