Pergunta

Eu tenho um widget que exibe um relógio analógico. O que eu gostaria é que o widget escreva em um banco de dados o momento em que um usuário clica no widget. Já tenho a classe DatabaseHelper e tenho uma atividade que exibe uma tela mostrando a data e hora atual e grava a hora em um banco de dados.

Eu segui o tutorial aqui: Tutorial de relógio analógico e acabou com isso:

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);
    }
}

A classe AskTheTime estende a atividade e os logs ao banco de dados em OnCreate (). Mas isso significa que ele exibe apenas o momento em que o widget foi iniciado - não quando foi clicado. (Acho que isso é porque estou começando um interior pendente) Não tenho certeza se devo colocar o banco de dados gravar em outro método ou se deveria estar usando os intenções para fazer esse tipo de coisa a partir de widgets. Quaisquer indicadores seriam ótimos! Eu olho para vários tutoriais para as intenções, mas nenhum deles parece muito claro para mim.

Foi útil?

Solução

Quando o seu widget é pressionado, o sistema operacional ativa a intenção pendente que você define no widget.

Parece que você está abrindo uma atividade AskthTime quando o widget é pressionado.

Portanto, o problema é que askTime pode ter sido criada quando o widget é pressionado, de modo que o onCreate() não é chamado novamente.

O que você poderia fazer é tentar fazer seu login OnStart () ou Resumindo() em vez de, ou além de, onCreate() dentro do seu activity.

Da documentação sobre onStart:

Chamado quando a atividade está se tornando visível para o usuário.

E OnResume:

Chamado quando a atividade começará a interagir com o usuário. Neste ponto, sua atividade está na parte superior da pilha de atividades, com a entrada do usuário indo para ela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top