Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


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

  • Widget muestra "La aplicación no está instalada" Tostada en ICS
  • Vista de imagen de Android
  • ¿Cómo agregar un widget a la pantalla principal de Android desde mi aplicación?
  • El evento de clic de botón de Android AppWidget no se recibe después de que el lanzador de inicio de fuerza detiene
  • Poner cualquier vista sobre un VideoView en Android
  • Cómo hacer widget de la aplicación en ejecución en android?
  • Actualizar programaticamente widget de actividad / servicio / receptor
  • Obtener la posición de la imagen actual en la Galería
  • 3 Solutions collect form web for “Múltiples instancias de Widget solamente Actualización del último widget”

    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); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.