0

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

我按照这里的教程:模拟时钟教程,最后得到了这个:

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

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

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

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

您可以做的是尝试在onStart()onResume()中登录,而不是onCreate()activity.

从有关的文档中onStart

当活动对用户可见时调用。

和 onResume:

当 Activity 开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到它。

于 2010-01-21T22:04:22.833 回答