2011-08-30 19 views

Respuesta

46

Lo que generalmente hago es agregar una marca para una preferencia compartida específica en el Main Activity: si esa preferencia compartida falta, ejecute 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 por defecto 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 cargar las preferencias por defecto compartida y buscar la previously_started preferencia booleano. 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.

+0

Great suggestion !! ¡Lo intentaré!. ¿Podría proporcionar un pequeño código de ejemplo de cómo debería funcionar? –

+0

Entonces, ¿qué hace el booleano previamente iniciado? –

+0

Entonces, ¿qué sucede si el previamente iniciado no es nulo? –

11

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); 
+0

Así que en onCreate() podría probar el booleano IS_FIRST, si está ahí, entonces continúas. De lo contrario, deténgase y avise al usuario o lo que yo quiera hacer. –

+1

Claro que puedes hacerlo. – Samuel

1

que había hecho esto sin compartido prefrence ... que yo sepa compartía prefrence consume algo de memoria, así que utiliza variable booleana estática pública en clase mundial .... Primero hice clase mundial appconfig ... y luego me hace variable estática booleano como esto:

public class Appconfig { 

    public static boolean activity = false; 
} 

luego utiliza esta variable booleana estática pública 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. por lo que me había puesto en el condtion actividad de bienvenida ... si la clase de bienvenida dirigido por primera vez por lo que la variable booleana estática es falso ...

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 bien, en la clase de actividad Licesnce hice:

Appconfig.activity=true; 

Así que cada vez que ejecutar la aplicación de la segunda actividad "actividad principal" ejecutar después de la actividad de bienvenida no licencia de actividad ....

+2

Esto también se consume en la memoria RAM (que es más importante) y cuando la aplicación se guarda en la basura, esto significa que el valor se establecerá en predeterminado, que es falso, ¿verdad? –

11

Publica el siguiente código dentro de su declaración 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(); 

Reemplazar FirstLaunch.class con la clase que le gustaría poner en marcha

+0

¿Qué sucede si quiero borrar el valor de esta preferencia? ¿Puedo hacer eso en tu código? – Dre

0

declarada en el nivel mundial

public int count=0 
    int tempInt = 0; 

en su función onCreate pasado 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"); 
     } 

más allá de estos dos métodos exterior 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(); 
} 
2
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(); 
} 
0

Declare A nivel mundial

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