Actualizar Android Widget de la actividad

Tengo un widget, su configuración para que cuando haga clic en él, se abre algunos ajustes en una actividad.

views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent); 

Esto configura algunos ajustes para la aplicación. Lo que quiero lograr es que el widget actualice su vista para reflejar los cambios de configuración cuando se cierre la Actividad I. Utilizar el intervalo de actualización o cualquier otro tipo de sondeo no es apropiado para esto.

He visto un par de lugares aquí y en los documentos Android este código utilizado:

 appWidgetManager.updateAppWidget(mAppWidgetId, views); 

Pero no sé cómo obtener el valor mAppWidgetId. Intenté seguir el ejemplo de una actividad de configuración de widget aquí http://developer.android.com/guide/topics/appwidgets/index.html , pero en el siguiente código,

  Intent intent = getIntent(); Bundle extras = intent.getExtras(); if (extras != null) { mAppWidgetId = extras.getInt( AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); } 

Extras siempre es nulo, así que nunca obtengo el AppWidgetID.

Ok, ahora sólo estoy divagando. ¿Qué crees que puedo hacer?

Finalmente encontré la respuesta que estaba buscando, estaba en una sobrecarga de la función updateAppWidget.

  appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views); 

Esto me permite acceder al widget sin tener que conocer el appWidgetID. Mi código final en mi actividad es entonces:

  // Create an Intent to launch ExampleActivity Intent intent = new Intent(this, Settings.class); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0); views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent); AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this); appWidgetManager.updateAppWidget(new ComponentName(this.getPackageName(), Widget.class.getName()), views); finish(); 

Tengo que hacer todas las cosas de configuración mismo que tenía que hacer en el método onUpdate del Widget, pero ahora cada vez que salgo de mi actividad el Widget está mostrando el estado correcto.

Hay otra forma de hacerlo: pasar el ID de widget en la intención pendiente que utiliza para iniciar la actividad:

 Intent clickIntent=new Intent(context, MyConfigActivity.class); clickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId); // you have the widgetId here, since it's your onUpdate PendingIntent pendingIntent=PendingIntent .getActivity(context, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.btnActivate, pendingIntent); 

Por otra parte, para evitar la duplicación de código de onUpdate () , puede transmitir una intención de nuevo a la AppWidgetProvider:

 Intent intent = new Intent(this,MyAppWidgetProvider.class); intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); // Use an array and EXTRA_APPWIDGET_IDS instead of AppWidgetManager.EXTRA_APPWIDGET_ID, // since it seems the onUpdate() is only fired on that: int[] ids = {widgetId}; intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids); sendBroadcast(intent); 

Sé que esto ha sido contestado y aceptado hace tiempo. Sin embargo, mientras yo estaba buscando lo mismo me encontré con una manera increíblemente simple para actualizar el widget.

Para futuros lectores:

La mejor parte, esto funciona para todas las instancias del widget y desde cualquier contexto (Actividad, Servicio, etc.)

Heres el código,

 Context context = this; AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_2x1); ComponentName thisWidget = new ComponentName(context, MyWidget.class); remoteViews.setTextViewText(R.id.my_text_view, "myText" + System.currentTimeMillis()); appWidgetManager.updateAppWidget(thisWidget, remoteViews); 

Cortesía – pegado 🙂

  • Widget de aplicación setImageViewUri no actualiza la imagen
  • Android: reproductor de música por defecto en lockscreen
  • Android ICS widgets - listviews se queda en blanco al azar (cuando el lanzador se reinicia?) RemoteviesService error?
  • No se puede actualizar el widget android desde BroadcastReceiver
  • Android: LED no se enciende / apaga
  • ¿Cómo actualizar los widgets de un servicio?
  • Android 3.0, Vista previa de widgets
  • ¿Cómo almacenar datos para un widget?
  • Actualizar widget android en condición
  • ¿Cómo usar una tipografía personalizada en un widget?
  • Widget del visor de PDF en Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.