вход в базу данных, когда пользователь нажимает на виджет - PullRequest
0 голосов
/ 14 января 2010

У меня есть виджет, который отображает аналоговые часы. Что бы я хотел, чтобы виджет записывал в базу данных время, когда пользователь нажимает на виджет. Я уже получил класс 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, чтобы делать подобные вещи из виджетов. Любые указатели были бы великолепны! Я рассмотрел несколько учебных пособий для целей, но ни один из них не кажется мне очень понятным.

1 Ответ

1 голос
/ 22 января 2010

Когда ваш виджет нажимается, ОС активирует ожидающее намерение, которое вы установили на виджете.

Похоже, вы открываете активность AskTheTime, когда виджет нажат.

Итак, проблема в том, что AskTheTime, возможно, уже был создан при нажатии виджета, поэтому onCreate() больше не вызывается.

Что вы можете сделать, это попробовать выполнить вход в систему onStart () или onResume () вместо или в дополнение к onCreate() внутри вашего activity.

Из документации по onStart:

Вызывается, когда активность становится виден пользователю.

и по резюме:

Вызывается, когда начинается действие взаимодействовать с пользователем. В этот указать вашу деятельность на вершине стек активности с пользовательским вводом собираюсь к нему.

...