Вход в базу данных, когда пользователь нажимает на виджет

StackOverflow https://stackoverflow.com/questions/2062958

Вопрос

У меня есть виджет, который отображает аналоговые часы. Что я хотел бы, чтобы виджет написал в базу данных время, когда пользователь нажимает на виджет. У меня уже есть класс DatabaseHelper, и у меня есть действие, которое отображает экран, показывающий текущую дату и время, и записывает время в базу данных.

Я следил за учебником здесь: Аналоговое учебное пособие и закончил это:

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

Это было полезно?

Решение

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

Похоже, вы открываете действие, когда виджет, когда нажимается.

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

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

Из документации относительно onStart:

Называется, когда деятельность становится видимой для пользователя.

И onresume:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top