java - seguridad - Guarda poca información como configuración en Android(como la primera vez que se ejecuta la aplicación)
no se ha podido iniciar la aplicacion java (6)
Quiero guardar una marca para reconocer que mi aplicación se ejecuta por primera vez o no. Para este trabajo simple no quiero crear base de datos ...
¿Hay una opción simple para hacer esto? Quiero guardar y leer pequeñas piezas de información solamente.
¿Qué pasa con el uso de variables static
nivel mundial?
Puedes hacer esto como se indica en este tutorial . Sé que manejar proveedores de Contenido no es necesario solo para mantener algunas banderas.
De lo contrario, puede consultar las developer.android.com/reference/android/content/… proporcionadas por Android. Aquí hay un buen ejemplo para empezar.
Esta sería mi recomendación.
Le sugiero que vaya para el almacenamiento persistente SharedPreference . Es muy fácil y rápido de almacenamiento / recuperación para una pequeña cantidad de información.
Ver el código para obtener el valor de SharedPreference
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
y para almacenar valor en SharedPreference
// We need an Editor object to make preference changes.
// All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
Puedes hacer una clase por ejemplo: (como un objeto por ejemplo)
import android.content.Context;
import android.content.SharedPreferences;
public class SettingsMain {
Context context;
SharedPreferences preferences;
SharedPreferences.Editor editor;
private static final String PREFER_NAME = "settingsMain";
public static final String KEY_VIBRATE = "switchVibrate";
public SettingsMain(Context context) {
this.context = context;
setPreferences();
}
private void setPreferences(){
preferences = context.getSharedPreferences(PREFER_NAME, context.MODE_PRIVATE);
editor = preferences.edit();
}
public void cleanPreferences(){
editor.clear();
editor.commit();
}
public void setStatusVibrate(Boolean status){
editor.putBoolean(KEY_VIBRATE, status);
editor.commit();
}
public Boolean getstatusVibrate(){
return preferences.getBoolean(KEY_VIBRATE, true);
}
}
En su llamada de actividad:
public class Home extends AppCompatActivity {
private SettingsMain settings;
private SwitchCompat switchVibrate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.master);
setResources();
getSettings();
}
private void setResources(){
switchVibrate = (SwitchCompat) findViewById(R.id.master_main_body_vibrate_switch);
switchVibrate.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
settings.setStatusVibrate(isChecked);
}
});
}
private void getSettings(){
settings = new SettingsMain(this);
switchVibrate.setChecked(settings.getstatusVibrate());
}
}
Una forma adecuada de hacerlo es mediante el uso de la clase de Android SharedPreferences
que se usa para cosas como esta.
Configuración de almacenamiento
SharedPreferences settings = getSharedPreferences(NAME_OF_PREFERENCES, MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("appPreviouslyStarted", true);
editor.apply();
¡No olvides aplicar o tus mutaciones en la configuración no se guardarán!
Puedes crear múltiples configuraciones usando diferentes NAME_OF_PREFERENCES
. La configuración se almacena en el dispositivo, por lo que estará disponible después de cerrar la aplicación.
Cuando intenta recuperar NAME_OF_PREFERENCES
que aún no se ha creado, crea uno nuevo. Ver más comportamientos como este here .
apply () contra commit ()
Puede usar editor.apply()
así como editor.commit()
, la única diferencia es que apply () no devuelve un valor boolean
si la edición fue exitosa o no. editor.apply () es por lo tanto más rápido y más comúnmente utilizado.
¿Qué es MODE_PRIVATE?
Puedes ver todo sobre los diferentes modos here . Para tu caso, MODE_PRIVATE
está bien.
Recuperando ajustes
SharedPreferences settings = getSharedPreferences(NAME_OF_PREFERENCES, MODE_PRIVATE);
boolean silent = settings.getBoolean("silentMode", false);
Al recuperar una configuración de un objeto SharedPreferences
, siempre debe especificar un valor predeterminado que se devolverá cuando no se encuentre la configuración. En este caso eso es false
.
Utilice SharedPreferences
.
SharedPreferences preferences = getSharedPreferences("prefName", MODE_PRIVATE);
SharedPreferences.Editor edit= preferences.edit();
edit.putBoolean("isFirstRun", false);
edit.commit();
Utilice sharedPreference
o files
para guardar los datos, pero la mejor opción es sharedPreference
.
Para recuperar
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
Para ahorrar
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", true);
editor.commit();