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 🙂

  • Activar o desactivar dinámicamente un widget no funciona
  • Copia de seguridad y restaurar widgets pantalla de inicio y fondo de pantalla en vivo
  • Widget de Android no se actualizará
  • Coordenadas de la pantalla de inicio de Android y xy
  • Widget para encender / apagar la linterna de la cámara en android
  • Múltiples OnClick en Widget para la misma intención
  • Android Widget: vista previaEstación de imagen
  • Android: muestra la lista de contactos con el mismo número de teléfono
  • AsyncTask para actualizar widget - cómo acceder a textviews en onPostExecute ()?
  • actualizar el widget android (utilizando tareas asíncronas) con una imagen de Internet
  • Cambiar el color de la pista
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.