我有一个显示模拟时钟的小部件。我想要的是小部件在用户点击小部件时写入数据库。我已经有了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从小部件中执行此类操作。任何指针都会很棒!我看了几个意图的教程,但对我来说似乎都不是很清楚。
答案 0 :(得分:1)
按下窗口小部件后,操作系统会激活您在窗口小部件上设置的待处理意图。
按下窗口小部件时,您似乎正在打开活动AskTheTime。
所以问题是按下小部件时可能已经创建了AskTheTime,因此不会再次调用onCreate()
。
您可以尝试在onStart()或onResume()中进行登录,而不是onCreate()
内activity
的{{1}}。
有关onStart
的文档:
活动结束时调用 对用户可见。
并且onResume:
活动开始时调用 与用户交互。在这 指出你的活动是最重要的 活动堆栈,用户输入 去吧。