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
- Android webview permanecer en la aplicación
- Cómo hacer widget de la aplicación en ejecución en android?
- ImeOptions "actionNext" por programa - cómo saltar al siguiente campo?
- Android RadioButton como Comportamiento
- ¿Acceso estático a los recursos de una aplicación para Android?
(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
- Cómo detectar MotionEvent.ACTION_DOWN en el servicio Android
- Widget Android dimensiones?
- cómo hacer que las columnas en la distribución de la tabla se distribuyan uniformemente, aprovechando al máximo el espacio disponible
- Cómo manejar correctamente eventos de clic en Widget
- Crear una burbuja de chat en Android
- Cómo enlazar AppWidgets a AppWidgetHost - Android
- Widget ListView con múltiples intentos pendientes
- ¿Cómo logró Google lograr esto? Slide ActionBar en la aplicación de Android
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);