studio - sharedpreferences android code
¿Puedo obtener datos de las preferencias compartidas dentro de un servicio? (5)
Estoy desarrollando una aplicación para Android. Estoy usando Android 2.2
En mi aplicación, estoy capturando datos de GPS y enviándolos al servicio con el intervalo de 1 hora. Si el usuario sale de la aplicación, también está funcionando (es obligatorio).
Estoy usando 2 servicios (definidos por el usuario), uno para capturar datos GPS y otro para enviar al servidor.
Aquí mi duda
En servicio, ¿podemos usar preferencias compartidas?
Si almacenamos datos en preferencias compartidas en cualquier actividad de la aplicación, ¿podremos usar esa información en el servicio con la ayuda de preferencias compartidas?
Hay dos formas de crear una instancia de SharedPreference
:
Caso 1:
SharedPreferences preferences = activity.getSharedPreferences("<PrefName>", MODE_PRIVATE);
Caso 2
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
Observe si crea una preferencia con el mismo nombre (caso 1) o el mismo contexto (caso 2), incluso en diferentes lugares, sigue siendo el mismo y puede compartir datos, obviamente.
Necesita un contexto para tener acceso a las preferencias compartidas. La mejor manera es crear MyApplication
como un descendiente de la clase Application
, crear instancias de las preferences
y usarlas en el resto de la aplicación como MyApplication.preferences
:
public class MyApplication extends Application {
public static SharedPreferences preferences;
@Override
public void onCreate() {
super.onCreate();
preferences = getSharedPreferences( getPackageName() + "_preferences", MODE_PRIVATE);
Por ejemplo, si necesita acceder a sus preferencias en otro lugar, puede llamar a esto para leer sus preferencias:
String str = MyApplication.preferences.getString( KEY, DEFAULT );
O puede llamar a esto para guardar algo en las preferencias:
MyApplication.preferences.edit().putString( KEY, VALUE ).commit();
(¡no olvide llamar a commit()
después de agregar o cambiar preferencias!)
Sí, Shivkumar, puede usar sus preferencias de uso compartido en cualquier tipo de servicio de forma normal como lo está haciendo en su Actividad.
igual que
SharedPreferences preferences = getSharedPreferences("<PrefName>",
MODE_PRIVATE);
Puede acceder a la instancia predeterminada de preferencias compartidas, que se comparte en todas sus clases de Activity
y Service
, llamando a PreferenceManager.getDefaultSharedPreferences(Context context)
:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
Esto es ideal para almacenar elementos primitivos simples (como booleanos) u objetos serializables. Sin embargo, si está capturando una gran cantidad de datos de ubicación, puede considerar el uso de una base de datos SQLite en su lugar.
Encuentro la solución.
Dentro de un servicio llamamos al siguiente método para obtener las preferencias compartidas
myapp.bmodel.getApplicationContext().getSharedPreferences("myPrefs_capture_gps_per_hour", Context.MODE_PRIVATE);
En el código anterior, myapp es un objeto de la clase de aplicación que se deriva de la aplicación