android - tutorial - Ejecutar un fragmento de código solo una vez cuando se instala una aplicación
manual de programacion android pdf (4)
Esta pregunta ya tiene una respuesta aquí:
Quiero ejecutar un fragmento de código solo una vez en mi aplicación y es cuando lo ejecuto por primera vez (aplicación recién instalada). ¿Cómo podría hacer esto? ¿Alguien puede explicar cómo dar un pedazo de código?
En realidad, en mi proyecto de Android quiero crear una base de datos e insertar algunos valores solo en la primera ejecución. Después de eso, ese fragmento de código en particular no debería ejecutarse de nuevo. ¿Cómo puedo lograr este mecanismo a través de SharedPreferences o Preferences .
Código de ejemplo será más útil.
Donde sea que necesite ejecutar este código en su aplicación:
- Compruebe si el booleano
firstTime
es verdadero en las preferencias compartidas Si no
- Ejecutar el código de una vez
- Guardar
firstTime
como verdadero en preferencias compartidas
Algo como esto:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if(!prefs.getBoolean("firstTime", false)) {
// run your one time code here
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
Esto es lo que hago en esas situaciones:
wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun)
{
// Do your magic here
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
}else{
//what you do everytime goes here
}
espero que esto ayude
Tu podrías intentar :
SharedPreferences wmbPreference = PreferenceManager.getDefaultSharedPreferences(this);
boolean isFirstRun = wmbPreference.getBoolean("FIRSTRUN", true);
if (isFirstRun)
{
// Code to run once
SharedPreferences.Editor editor = wmbPreference.edit();
editor.putBoolean("FIRSTRUN", false);
editor.commit();
}
Escribe esto en tu primera actividad en crear. Luego después el código no se ejecutará de nuevo.
Antes de todo puedes usar SQLiteOpenHelper . Es la forma preferida de hacer cosas con base de datos. Esta clase tiene un onCreate(SQLiteDatabase)
, que se llama cuando se crea la primera base de datos. Creo que te queda bien.
Si desea más flexibilidad y su primera lógica no está vinculada solo con la base de datos, puede usar la muestra proporcionada anteriormente. Solo necesitas ponerlo en el punto de inicio.
Hay 2 puntos de inicio. Si solo tiene una actividad, puede poner su código en el método onCreate
, por lo que será así:
public void onCreate(Bundle savedInstanceState) {
// don''t forget to call super method.
super.onCreate(savedInstanceState);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
// <---- run your one time code here
databaseSetup();
// mark first time has ran.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
No olvide poner la declaración de actividad en manifiesto , así como sus intentfilters de intentfilters (acción = MAIN
, categoría = LAUNCHER
).
Si tiene más de una actividad y no desea duplicar su lógica de inicio, solo puede poner su lógica de inicialización en la instancia de la Aplicación, que se crea antes de todas las actividades (y otros componentes, como servicios, receptores de difusión, proveedores de contenido) .
Solo crea una clase como esa:
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
if (!prefs.getBoolean("firstTime", false)) {
// <---- run your one time code here
databaseSetup();
// mark first time has ran.
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("firstTime", true);
editor.commit();
}
}
Todo lo que necesita para que esto funcione, se coloca en la etiqueta de la application
en el atributo AndroidManifest.xml android: name = ". App".
<!-- other xml stuff -->
<application ... android:name=".App">
<!-- yet another stuff like nextline -->
<activity ... />
</application>