Múltiples instancias de Widget solamente Actualización del último widget

Tengo un WidgetProvider y una Actividad de Configurar

Cuando se inicia el Widget, comienza con la actividad configure y la configuro haciendo una llamada personalizada al widgetprovider

(Que te darás cuenta es de los ejemplos tutorial sdk)

// Push widget update to surface with newly set prefix AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); AwarenessWidget.updateAppWidget(context, appWidgetManager, mAppWidgetId, position); // Make sure we pass back the original appWidgetId Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish(); 

Paso el ID de Widget a la función …. dentro del widget creo un Intent como este:

  Intent configIntent = new Intent(context, Configure.class); configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); PendingIntent pendingIntent = PendingIntent.getActivity (context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.MainImage,pendingIntent); views.setImageViewResource(R.id.MainImage, lv_images[version]); appWidgetManager.updateAppWidget(appWidgetId, views); 

Siempre estoy haciendo referencia a la ID de widget e incluso lo agregamos como un extra en la intención, pero cuando recibo dos de estos widgets en la pantalla de inicio, el ID de widget siempre hace referencia al ID de widget colocado por última vez

Tuve un problema similar. Sólo tiene que añadir esto a su actividad de configuración, donde se establece su PendingIntent:

 Uri data = Uri.withAppendedPath( Uri.parse(URI_SCHEME + "://widget/id/") ,String.valueOf(appWidgetId)); intent.setData(data); 

La variable URI_SCHEME es una String, y puede ser lo que quieras .. ie – "ABCD" Esto hace que cada widget tenga un PendingIntent único.

Esta es una explicación más detallada de por qué su código no funciona y cómo solucionarlo. Desde la documentación de Android SDK:

Un PendingIntent en sí mismo es simplemente una referencia a un token mantenido por el sistema que describe los datos originales utilizados para recuperarlo. Esto significa que, incluso si se pierde el proceso de su aplicación propietaria, PendingIntent seguirá siendo utilizable de otros procesos que se le han dado. Si la aplicación de creación vuelve a recuperar posteriormente el mismo tipo de PendingIntent (misma operación, misma acción de intención, datos, categorías y componentes y los mismos indicadores), recibirá un PendingIntent que represente el mismo token si sigue siendo válido y puede Por lo tanto llamar a cancel () para eliminarlo.

Debido a este comportamiento, es importante saber cuándo dos Intentes se consideran los mismos para los propósitos de recuperar una PendingIntent. Un error común que la gente comete es crear múltiples objetos PendingIntent con Intents que solo varían en su contenido "extra", esperando obtener un PendingIntent diferente cada vez. Esto no sucede. Las partes de la Intención que se utilizan para hacer coincidir son las mismas definidas por Intent.filterEquals. Si utiliza dos objetos Intent que son equivalentes según Intent.filterEquals, obtendrá el mismo PendingIntent para ambos.

Tenga en cuenta que especificar distintos contenidos "extra" no es suficiente para que los PendingIntents se consideren únicos, pero establecer un URI único con setData es. Es por eso que la solución URI de Snailer "mágicamente" soluciona el problema.

La documentación también ofrece una solución diferente (posiblemente más simple) al problema. En lugar de crear un URI personalizado sólo tiene que establecer un único requestCode cuando llame a getActivity:

 PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

Fuente: http://developer.android.com/reference/android/app/PendingIntent.html

En mis pruebas, el uso de setData (…) en PendingIntent no soluciona el problema en un Verizon Thunderbolt con Android 4.0.4. Funciona en mis otros dispositivos de prueba y emulador.

He probado el uso del requestCode en su lugar, y funciona en todos los casos. Acabo de configurar el requestCode para que sea el widget ID:

 pendingIntent = PendingIntent.getService(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
  • Manejo Hecho y siguiente de SoftKeypad en android?
  • Problema de enfoque de Android WebView
  • El widget de depuración causa ANR
  • Entrada de funciones matemáticas como, logos coseno-tangentes en Android
  • Transmisión de datos del widget a la aplicación
  • Widget no se actualiza después de cambios de configuración
  • Widget StackView Ejemplo de código fuente
  • Registrar BroadcastReceiver to Widget (Diferencia de objeto de contexto)
  • Centrar los elementos de texto en ListView
  • Android Spinner - ¿Cómo hacer que la vista desplegable sea transparente?
  • Cambiar tamaño: Botón de radio de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.