Rotación automática de pantalla Desactivación de Widget RemoteView evento onClick

Tengo un poco de un extraño error con un widget que he codificado- después de que la pantalla gira el widget deja de responder a eventos onClick. El código es exactamente el mismo que en la documentación para desarrolladores de Android para los widgets de aplicaciones aquí . He notado otros widgets del mercado no tienen este problema, ¿hay una solución conocida quizás? He tratado de tocar todo el lugar después de una rotación por lo que no creo que su el onClickPendingIntent no se cambia el tamaño después de una rotación; No parece estar presente en absoluto.

No puedo encontrar un tipo de activación onRotation () para el AppWidgetProvider para rehacer el código de escucha en caso de una rotación por lo que estoy bastante inseguro cómo proceder …

¡Gracias!

Recibí la siguiente respuesta de un mensaje que hice en Google Groups, que resolvió mi problema. No puedo decir si resolvería el problema del cartel original, pero yo aunque lo publicaría, en caso de que alguien más se enfrente a este problema. El enlace a mi publicación de Grupos de Google es:

http://groups.google.com/group/android-developers/browse_thread/thread/ca8c2958b6dc086c#


No hay onUpdate en los cambios de configuración. La pantalla de inicio recrea su widget, luego toma las RemoteViews más recientes y las aplica al widget.

Me imaginé que estaba recreando el Widget en rotación. El problema es que no parece estar recibiendo ningún mensaje a ese efecto, y no tengo manera (que puedo ver) de restablecer la conexión. ¿Cómo puedo determinar que ha ocurrido una rotación y configurar una nueva conexión onClick?

Como he dicho, usted no (determinar o responder a un cambio de orientación).

Lo que hace es asegurarse de que cada vez que su código empuja un objeto RemoteViews a la aplicación de inicio de su widget, está completo en todos los aspectos:

  • Tiene identificadores de recursos de imagen;
  • Tiene picaduras de texto;
  • Tiene intenciones pendientes.

No realices actualizaciones de widget "incremental", como lo harías con una actividad normal. No establezcas primero las intenciones, luego las imágenes y luego el texto que refleja la información actual.

La aplicación para el hogar se ejecuta como un proceso independiente y su estado puede salir de paso con el receptor de widgets. Cuando lo hace, lo único que tiene para volver a crear el widget es el objeto RemoteViews más reciente. Si está completo y tiene todas las partes, todo funcionará bien. Si sólo tiene el texto o el cambio de imagen más reciente, las actualizaciones anteriores que tenían las intenciones se perderán.

http://kmansoft.wordpress.com/2010/05/23/widgets-and-orientation-chan

– Kostya

El siguiente código parece ser capaz de resolver el problema.

@Override public void onAppWidgetOptionsChanged(Context context, AppWidgetManager appWidgetManager, int appWidgetId, Bundle newOptions) { super.onAppWidgetOptionsChanged(context, appWidgetManager, appWidgetId, newOptions); onUpdate(context, appWidgetManager, new int[] {appWidgetId}); } 

En primer lugar, asegúrese de que su RemoteViews es una representación COMPLETA del estado del widget si está llamando a AppWidgetManager.updateAppWidget() . Establecer todos los intentos pendientes, ver datos, etc. Este estado será reutilizado cuando el lanzador quiere restaurar su widget de estado, por ejemplo. Cuando la rotación cambia.

Cuando desee actualizar sus vistas remotas pero no desea proporcionar una representación completa de RemoteViews, es decir. Sólo desea cambiar un estado remoteView existente, puede utilizar AppWidgetManager.partiallyUpdateAppWidget() .

Esta actualización difiere de updateAppWidget (int, RemoteViews) en que el objeto RemoteViews que se pasa se entiende que es una representación incompleta del widget y por lo tanto no se almacena en caché por el AppWidgetService. Tenga en cuenta que debido a que estas actualizaciones no se almacenan en caché, cualquier estado que modifiquen que no se restaure mediante restoreInstanceState no se mantendrá en el caso de que los widgets se restauren utilizando la versión almacenada en caché en AppWidgetService. Utilice con RemoteViews.showNext (int), RemoteViews.showPrevious (int), RemoteViews.setScrollPosition (int, int) y comandos similares.

Por ejemplo, al avanzar un ViewPager para un widget fuera de onUpdate:

 final RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.app_widget_4x2); remoteViews.showNext(R.id.appWidget_viewFlipper); appWidgetManager.partiallyUpdateAppWidget(widgetId, remoteViews); 
  • Widget de Android no se está actualizando
  • Forzar el widget de Android a actualizar
  • Widget de aplicación: Efecto de ondulación perdido en el elemento de lista cuando se agrega fondo al diseño externo
  • ¿Cómo puedo crear un widget de aplicación de paginación de Android compatible con versiones anteriores?
  • ¿Por qué mi administrador de alarmas de Android está disparando al instante?
  • ListView + GridView en el Widget
  • Artículos duplicados en el widget GridView
  • El método de Android AppWidgetManager updateAppWidget falla en establecer intents, cargar datos. Y sucede al azar
  • Actualización de AppWidget
  • Obtener otras aplicaciones icono uri?
  • OnGetViewFactory sólo se llama una vez para varios widgets
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.