¿Cómo iniciar actividad solo una vez cuando la aplicación se abre por primera vez?

Tengo una actividad que solo quiero ejecutar cuando la aplicación se ejecuta por primera vez.

Y nunca más. Es una actividad de inicio de sesión de Facebook. Solo quiero iniciarlo una vez cuando la aplicación se abre por primera vez.

¿Cómo voy a hacer esto?

Lo que generalmente hago es agregar un cheque para una preferencia compartida específica en la Main Activity : si falta esa preferencia compartida, inicie la Actividad de ejecución única; de lo contrario, continúe con la actividad principal. Cuando inicie la actividad de ejecución única, cree la preferencia compartida para que se salte la próxima vez.

EDITAR : En mi onResume para la actividad predeterminada hago esto:

  SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); boolean previouslyStarted = prefs.getBoolean(getString(R.string.pref_previously_started), false); if(!previouslyStarted) { SharedPreferences.Editor edit = prefs.edit(); edit.putBoolean(getString(R.string.pref_previously_started), Boolean.TRUE); edit.commit(); showHelp(); } 

Básicamente cargo las preferencias compartidas predeterminadas y busco la preferencia booleana previously_started iniciada. Si no se ha configurado, lo configuro y luego ejecuto el archivo de ayuda. Utilizo esto para mostrar automáticamente la ayuda la primera vez que se instala la aplicación.

Publique el siguiente código dentro de su statement onCreate

  Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE) .getBoolean("isFirstRun", true); if (isFirstRun) { //show start activity startActivity(new Intent(MainActivity.this, FirstLaunch.class)); Toast.makeText(MainActivity.this, "First Run", Toast.LENGTH_LONG) .show(); } getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit() .putBoolean("isFirstRun", false).commit(); 

Reemplace FirstLaunch.class con la clase que le gustaría lanzar

algo como esto podría funcionar.

 public class MyPreferences { private static final String MY_PREFERENCES = "my_preferences"; public static boolean isFirst(Context context){ final SharedPreferences reader = context.getSharedPreferences(MY_PREFERENCES, Context.MODE_PRIVATE); final boolean first = reader.getBoolean("is_first", true); if(first){ final SharedPreferences.Editor editor = reader.edit(); editor.putBoolean("is_first", false); editor.commit(); } return first; } } 

uso

 boolean isFirstTime = MyPreferences.isFirst(MyActivity.this); 
 SharedPreferences dataSave = getSharedPreferences("firstLog", 0); if(dataSave.getString("firstTime", "").toString().equals("no")){ // first run is happened } else{ // this is the first run of application SharedPreferences.Editor editor = dataSave.edit(); editor.putString("firstTime", "no"); editor.commit(); } 

Lo había hecho sin Preferencia Compartida … como sé que la prefrencia compartida consume algo de memoria, así que utilicé una variable booleana pública estática en la clase global … Primero hice Global Class Appconfig … y luego hice una variable estática booleana como esta :

 public class Appconfig { public static boolean activity = false; } 

luego utilicé esta variable booleana pública estática en mi clase de actividad de bienvenida. Estoy usando la página de acuerdo de licencia. que tengo que usar solo de una vez en mi aplicación y luego nunca mostrar más cuando ejecuto la aplicación. entonces puse la condición en la actividad de bienvenida … si la clase de bienvenida se ejecuta por primera vez para que la variable booleana estática sea falsa …

  if (Appconfig.activity == false) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this,LicesnceActivity.class); startActivity(intent); WelcomeActivity.this.finish(); } if (Appconfig.activity == true) { Intent intent = new Intent(); intent.setClass(WelcomeActivity.this, MainActivity.class); startActivity(intent); } 

Ahora, en la clase de actividad de Licesnce, hice:

 Appconfig.activity=true; 

Entonces cada vez que ejecuto la aplicación, la segunda actividad “Actividad principal” se ejecuta después de la actividad de bienvenida, no de la actividad de licencia ….

Declarado en el mundo

  public int count=0 int tempInt = 0; 

en su función onCreate más allá de este código al principio.

  count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent intent = new Intent(); intent.setClass(MainActivity.this, TemporaryActivity.class); startActivity(intent); count++; writeSharedPreference(count,"cntSP","cntKey"); } 

Pasado estos dos métodos fuera de onCreate

  //Read from Shared Preferance public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName,Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); } 

Declarar globalmente

 public int count=0; int tempInt = 0; 

Primera pantalla OnCreate

 count = readSharedPreferenceInt("cntSP","cntKey"); if(count==0){ Intent i = new Intent(SplashScreen.this, IntroActivity.class); startActivity(i); count++; writeSharedPreference(count,"cntSP","cntKey"); } else { Intent i = new Intent(SplashScreen.this, MainActivity.class); startActivity(i); // close this activity } 

Ahora fuera del método de Oncreat

 public int readSharedPreferenceInt(String spName,String key){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); return tempInt = sharedPreferences.getInt(key, 0); } //write shared preferences in integer public void writeSharedPreference(int ammount,String spName,String key ){ SharedPreferences sharedPreferences = getSharedPreferences(spName, Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putInt(key, ammount); editor.commit(); }