用户单击窗口小部件时记录到数据库

时间:2010-01-14 08:30:42

标签: android android-widget android-intent

我有一个显示模拟时钟的小部件。我想要的是小部件在用户点击小部件时写入数据库。我已经有了databaseHelper类,并且有一个Activity,它显示一个显示当前日期和时间的屏幕,并将时间写入数据库。

我遵循了这里的教程:Analog Clock Tutorial并最终得到了这个:

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从小部件中执行此类操作。任何指针都会很棒!我看了几个意图的教程,但对我来说似乎都不是很清楚。

1 个答案:

答案 0 :(得分:1)

按下窗口小部件后,操作系统会激活您在窗口小部件上设置的待处理意图。

按下窗口小部件时,您似乎正在打开活动AskTheTime。

所以问题是按下小部件时可能已经创建了AskTheTime,因此不会再次调用onCreate()

您可以尝试在onStart()onResume()中进行登录,而不是onCreate()activity的{​​{1}}。

有关onStart的文档:

  

活动结束时调用   对用户可见。

并且onResume:

  

活动开始时调用   与用户交互。在这   指出你的活动是最重要的   活动堆栈,用户输入   去吧。