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 🙂

  • Android widget ¿cómo puede obtener el tiempo en hora y minuto de esto?
  • Parámetro de vista de Android para el método OnClickListener
  • Cómo recibir Intención. ACTION_PACKAGE_ADDED Propósito. ACTION_PACKAGE_REMOVED en appwidget?
  • Cómo actualizar un Widget dinámicamente (No esperar 30 min para que onUpdate se llame)?
  • Ancho más pequeño para Galaxy S y Galaxy S2
  • Restaurar Administrador de alarmas después de reiniciar el teléfono
  • Widget de Android con ListView no carga elementos correclty
  • No se puede enviar la intención pendiente del widget, SendIntentException
  • Android Widget onReceive no puede llamar a la clase de servicio?
  • Los bordes redondos de Android en la barra de progreso en forma de anillo
  • ¿Cómo almacenar datos para un widget?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.