Pregunta

Tengo un widget que muestra un reloj analógico. Lo que me gustaría es que el el widget escribir en una base de datos del momento en que un usuario hace clic en el widget. Ya tengo la clase databaseHelper y tienen una actividad que muestra una pantalla que muestra la fecha y hora actuales y escribe el tiempo para una base de datos.

He seguido el tutorial aquí: Reloj analógico Tutorial y terminó con esto:

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action))
    {
        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
        this.mIntent = new Intent(context, AskTheTime.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, mIntent, 0);
        views.setOnClickPendingIntent(R.id.Widget, pendingIntent);

        AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), views);
    }
}

La clase AskTheTime extiende actividad y los registros de la base de datos en onCreate (). Pero esto significa que sólo muestra el momento en que se inició el widget - no cuando se ha hecho clic. (Supongo que esto se debe a que estoy empezando un pendingIntent) No estoy seguro de si debo poner la escritura de base de datos en otro método o si debería usar Intentos de hacer este tipo de cosas de los widgets. ¡Cualquier punto sería genial! Tengo vistazo a varios tutoriales para las intenciones, pero ninguno de ellos parece muy claro para mí.

¿Fue útil?

Solución

Cuando se presiona el widget, el sistema operativo se activa la intención pendiente establecido en el widget.

Parece que se está abriendo un AskTheTime actividad cuando se presiona el widget.

Así que el problema es que AskTheTime podría haber sido ya creada cuando el control está presionado, por lo que el onCreate() no se llama de nuevo.

Lo que podría hacer es intentar hacer su registro en el onStart () o onResume () en lugar de, o además de, onCreate() dentro de su activity.

A partir de la documentación relativa a onStart:

  

Llamado cuando la actividad se está convirtiendo   visible para el usuario.

Y onResume:

  

Se llama cuando la actividad se iniciará   interactuar con el usuario. en este   señalar que su actividad es en la parte superior de   la pila de actividad, con la entrada de usuario   ir a la misma.

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