Después de que los botones de cambio de orientación en un widget no responden
Posible duplicado:
Después de que los botones de cambio de orientación de un widget no responden
Estoy haciendo frente a un problema con un appwidget que tiene un ImageView dentro del diseño del xml para el cual registro un pendingintent que se maneja en el método de OnReceive. Todo funciona bien hasta que cambie la orientación del teléfono. En este punto el widget ya no funciona, hago clic en la imagen pero no sucede nada. Este problema es exactamente como el de aquí: Después de que los botones de cambio de orientación en un widget no responden
- Evitar la actualización de la actividad en el cambio de orientación del fragmento android
- Actividad sólo en retrato o en reverso
- Apoyo a las dos orientaciones del paisaje en Honeycomb
- Android: Detectar la orientación cambiada
- Android: Guardar el estado de la aplicación en el cambio de orientación de la pantalla
¿Cuál es el problema y cómo se puede resolver? Gracias.
- Cambiar la orientación de la pantalla mediante un botón
- Cordova ignora el bloqueo de la orientación de la pantalla
- ¿Tengo que usar el acelerómetro en Android para que mis fotos se orienten correctamente?
- Fragmento manejo de la orientación de la pantalla con pestañas en barra de acción
- Cambio de orientación de la pantalla de la tableta: no se ha encontrado ninguna vista para id para Fragment
- Cómo manejar los cambios de orientación de la pantalla cuando hay una asyntax ejecutando con android 4.x
- Android ListFragment no guarda el paquete en onSaveInstanceState () / no recupera el bundle en onActivityCreated ()
- Establecer nuevo fragmento en la parte superior de la actividad no funciona con onConfiguration change
Finalmente conseguí recrear la solución sin servicio del OP. Aquí está el secreto para el registro: Cada vez que actualice las vistas remotas, debe actualizar todo lo que haya actualizado. Mi aplicación estaba actualizando algunos elementos visuales, pero no configurando el manejador de botones de nuevo. Esto hizo que el manejador dejara de funcionar – no de inmediato – sólo después de un cambio de rotación, de ahí la confusión.
Si esto se hace correctamente, no es necesario interceptar las transmisiones de cambio de configuración, las últimas vistas remotas que se establezca se utilizarán de nuevo después de la rotación. Ninguna llamada es necesaria para su AppWidgetProvider.
Tuve un problema similar, pero mi aplicación está funcionando bien ahora con la solución sugerida por Alex
"… resuelto sin la ayuda de un servicio, acaba de establecer de nuevo el setOnClickPendingIntent en el método OnReceive"
Seguí el método onReceive y se llama cada vez que cambio la orientación de mi dispositivo, así que llamé de nuevo la configuración de mi widget en el método onReceive.
De todos modos no estoy seguro de que esta es la mejor solución para resolver ese problema, si alguien sabe una mejor solución, por favor comparta.
Gracias.
Siempre que actualice la apariencia de su widget (utilizando una Actividad o su Broadcast Receiver [proveedor de widget de aplicación]), también debe reasignar todos los PendingIntents para los controladores de clics y, a continuación, llamar a updateAppWidget()
forma normal.
Ejemplo con setTextViewText()
:
// This will update the Widget, but cause it to // stop working after an orientation change. updateWidget() { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget"); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); } // This is the correct way to update the Widget, // so that it works after orientation change. updateWidget() { AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); remoteViews.setTextViewText(R.id.widget_text_view, "Updated widget"); Intent intent = new Intent(context, MyWidgetActivity.class); PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, ...); remoteViews.setOnClickPendingIntent(R.id.widget_click_button, pendingIntent); appWidgetManager.updateAppWidget(appWidgetId, remoteViews); }
Vea aquí una posible explicación, o más cosas para probar:
http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98008
o
Pero aún no está claro cuál es la verdadera solución.