0

アナログ時計を表示するウィジェットがあります。私が欲しいのは、ユーザーがウィジェットをクリックしたときにウィジェットがデータベースに書き込むことです。すでに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を開始しているためだと思います)データベース書き込みを別のメソッドに配置する必要があるのか​​、ウィジェットからこの種のことを行うためにIntentsを使用する必要があるのか​​わかりません。どんなポインタも素晴らしいでしょう!インテントについていくつかのチュートリアルを見てきましたが、どれも私にはあまり明確に見えません。

4

1 に答える 1

1

ウィジェットが押されると、OSはウィジェットに設定した保留中のインテントをアクティブにします。

ウィジェットが押されたときにアクティビティAskTheTimeを開いているようです。

したがって、問題は、ウィジェットが押されたときにAskTheTimeがすでに作成されている可能性があるため、onCreate()が再度呼び出されないことです。

できることは、の代わりに、またはに加えて、onStart()またはonResume()にログインしてみることonCreate()ですactivity

に関するドキュメントからonStart

アクティビティがユーザーに表示されるようになったときに呼び出されます。

そしてonResume:

アクティビティがユーザーとの対話を開始するときに呼び出されます。この時点で、アクティビティはアクティビティスタックの最上位にあり、ユーザー入力がそこに送られます。

于 2010-01-21T22:04:22.833 に答える