ユーザーがウィジェットをクリックしたときにデータベースにログを記録する
-
20-09-2019 - |
質問
アナログ時計を表示するウィジェットがあります。私が望むのは、ユーザーがウィジェットをクリックしたときにウィジェットがデータベースに書き込むことです。すでにdatabaseHelperクラスを取得しており、現在の日付と時刻を示す画面を表示し、その時刻をデータベースに書き込むアクティビティがあります。
ここのチュートリアルに従いました。 アナログ時計のチュートリアル そしてこれで終わりました:
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);
}
}
AskTheTime クラスはアクティビティを拡張し、onCreate() でデータベースにログを記録します。ただし、これは、ウィジェットがクリックされた時間ではなく、ウィジェットが開始された時間のみが表示されることを意味します。(これはpendingIntentを開始しているためだと思います)データベースの書き込みを別のメソッドに置くべきか、それともウィジェットからこの種のことを行うためにインテントを使用する必要があるのかわかりません。何かご参考になれば幸いです!インテントについていくつかのチュートリアルを見てきましたが、どれも私にはあまり明確ではないようです。
解決
ウィジェットが押されると、OS はウィジェットに設定した保留中のインテントをアクティブ化します。
ウィジェットを押すと、AskTheTime アクティビティを開いているように見えます。
したがって、問題は、ウィジェットが押されたときに AskTheTime がすでに作成されている可能性があることです。 onCreate()
また呼ばれない。
あなたができることは、ログインしてみることです onStart() または onResume() 代わりに、またはそれに加えて、 onCreate()
あなたの中に activity
.
に関するドキュメントから onStart
:
アクティビティが ユーザーに表示されます。
そして再開時:
アクティビティの開始時に呼び出されます ユーザーとの対話。これで アクティビティが アクティビティ スタック (ユーザー入力あり) それに行く。