¿Cómo almacenar datos para un widget?
Estoy creando un widget, y necesito almacenar algunos datos para ello. No tengo una Activity
con el widget, por lo que no puedo utilizar SharedPreferences
. Los datos que estoy almacenando son muy pequeños pero se accede con frecuencia, por lo que sería excesivo utilizar una base de datos para ello. He pensado en usar archivos simples, pero eso no parece una buena solución. ¿Hay alguna manera de almacenar datos simples para un widget?
- Android Widget usando Cordova
- ¿Cómo se ejecuta una actividad desde un botón de un widget en Android?
- ¿Cómo iniciar una nueva actividad desde lockscreen?
- Actualizar widget android en condición
- Desmarcando RadioButton - método alternativo
- OnClick PendingIntent en widget a veces no funciona
- Android RemoteViews, ¿cómo configurar ScaleType de un ImageView dentro de un widget?
- Cómo implementar un botón en un Widget de Android
- Android: no se puede abrir el contenido: file: /// storage / emulated / 0
- Android: la adición de datos al intento falla al cargar la actividad
- Listivew Widget no se actualiza automáticamente
- Cómo actualizar un Widget dinámicamente (No esperar 30 min para que onUpdate se llame)?
- Cómo configurar correctamente un icono de widget grande en android
No necesita una Activity
para almacenar preferencias, solo un Context
. En su clase que extiende AppWidgetProvider
, debe recibir un contexto en todos los métodos pertinentes como onUpdate
y onDeleted
.
A continuación, puede utilizar PreferenceManager
para obtener el objeto de preferencia y almacenar lo que necesita en él, como esto:
@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); String value = prefs.getString("key-string", null); if(value != null) { // do stuff } }
Como una nota lateral, menciona que consideró usar archivos pero no quiso hacerlo por razones de rendimiento. SharedPreferences
objetos SharedPreferences
terminan usando archivos sencillos, solo son administrados por Android. Si vas a tener acceso a menudo, todavía tendrá que ser cuidadoso con el rendimiento. Lo mismo ocurre con los DB de SQLite, ya que esos son sólo archivos.
Esos métodos regulares Widget contienen contexto es cierto, pero ¿qué pasa si esos contextos cambian? Por ejemplo, una aplicación llamada una acción que escuchar el widget con onReceive y guardar datos con ese contexto será capaz de leerlo con la acción de otra aplicación? – otro contexto.
¿Qué pasa si se anularía la aplicación y lo obtendría? – con actividad funciona, no estoy seguro sobre widget!
- Cómo guardar / cargar datos en línea (almacenar datos con AJAX y JSON) y sin conexión (localmente)
- Android XML Cómo obtener un ID de recurso (entero) de XML