login para um banco de dados quando o usuário clica em um widget
-
20-09-2019 - |
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.
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.