Pregunta

Mi aplicación para Android, Transdroid, ofrece varios widgets en la pantalla de inicio.Cada AppWidget tiene 2 'botones' (ImageButton), uno inicia la aplicación y el otro inicia alguna actividad que actualiza el contenido del AppWidget.Bastante simple. Aquí es una captura de pantalla.El código del widget está en mi sitio web de Google Code, pero lo más importante:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_15);
views.setOnClickPendingIntent(R.id.widget_action, PendingIntent.getActivity(context, 0, new Intent(context, Transdroid.class), 0));
appWidgetManager.updateAppWidget(id, views);

El problema es:El onUpdate del widget no se llama después de reiniciar el proceso de inicio y, por lo tanto, se pierden los PendingIntents utilizados para adjuntar la funcionalidad a los botones.

Es bastante fácil de reproducir.

  1. Iniciar un emulador
  2. Agregue un widget (que use un PendingIntent para, por ejemplo, iniciar una actividad)
  3. Haga clic en el botón para ver que realmente funciona.
  4. Forzar la eliminación del proceso de inicio ('adb -e shell kill 96' donde 96 es el PID de android.process.acore)
  5. El botón del widget ya no funciona.

Más preciso:no se llama a onReceive y, por lo tanto, a onUpdate cuando se reinicia el proceso de inicio android.process.acore.A su vez, no se adjunta ninguna Intención.

¿Alguien experimentó el mismo problema y sabe cómo solucionarlo?

¿Fue útil?

Solución

He acabo de probar un par de mis propias appwidgets, y sus eventos de clic funcionan bien después de matar acore. Aquí está mi código relevante:

    final RemoteViews views = new RemoteViews(context.getPackageName(), layoutId);
    views.setOnClickPendingIntent(R.id.widget_view, PendingIntent.getActivity(
            context, 
            0, 
            new Intent(context, MyActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 
            PendingIntent.FLAG_UPDATE_CURRENT));

La principal diferencia es que puedo ver las banderas relacionados en la intención; Yo diría que son definitivamente vale la pena probar. [El parámetro layoutId en mi código se establece elsewere; este mismo código se utiliza para varios widgets con diferentes diseños].

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top