我有一个显示模拟时钟的小部件。我想要的是当用户单击小部件时小部件写入数据库。我已经获得了 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() 中扩展活动并记录到数据库。但这意味着它仅显示小部件启动的时间 - 而不是单击它的时间。(我想这是因为我正在启动一个待处理的Intent)我不确定是否应该将数据库写入另一种方法中,或者是否应该使用意图从小部件中执行此类操作。任何指点都会很棒!我已经查看了几个意图的教程,但对我来说,它们似乎都不是很清楚。

有帮助吗?

解决方案

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

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

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

您可以做的就是尝试登录 onStart() 或者 onResume() 代替或补充 onCreate() 在你的里面 activity.

从有关的文档 onStart:

当活动变得可见时调用。

并在简历上:

在活动开始时调用 与用户交互。在此 将活动记录在顶部的点 活动堆栈,包含用户输入 去吧。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top