Android - как часто обновлять виджет, но только когда он виден?

Пожалуйста, прочитайте описание EKEvent (в стандартной структуре EKEvent), они упоминают

@discussion. Пока статус предлагает четыре разных значения в перечислении EKEventStatus, на практике это единственное действующее и надежный статус отменяется. Любой другой статус должен считаться информативным в лучшем случае. Вы не можете установить это свойство. Если вы хотите отменить событие, вы должны просто удалить его с помощью removeEvent:.

, поэтому вам нужно удалить это событие, если вы хотите отменить

30
задан awy 9 September 2014 в 07:47
поделиться

2 ответа

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

Два других пункта, указанных в вашем вопросе, невозможны. Невозможно определить, находится ли ваш виджет на главном экране, который в настоящее время не отображается, и нет способа определить, работает ли приложение, скрывающее домашний экран. Я подал заявку на http://b.android.com с просьбой добавить эту функцию в Android. Если вы хотите, чтобы его сняли, это поможет ему получить приоритет: http://code.google.com/p/android/issues/detail?id=5529&q=reporter:mark.r.baird&colspec=ID%20Type % 20Status% 20Owner% 20Summary% 20Stars

17
ответ дан 28 November 2019 в 00:18
поделиться

Я нашел это в проекте под названием 24clock in goole code . Он пытается не обновлять виджет, пока пользователь находится вне дома:

    ActivityManager am = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);

    List<RunningTaskInfo> runningTasks = am.getRunningTasks(2);
    for (RunningTaskInfo t : runningTasks) {
        if (t != null && t.numRunning > 0) {
            ComponentName cn = t.baseActivity;
            if (cn == null) continue;

            String clz = cn.getClassName();
            String pkg = cn.getPackageName();

            // TODO make this configurable
            if (pkg != null && pkg.startsWith("com.android.launcher")) {
                return true;
            }

            return false;
        }
    }

Это может быть ответом на ваше требование №2. Хотя это может не работать под другими сторонними программами запуска.

== Обновление ==

Несколько месяцев спустя у меня внезапно возникла идея, как определить, отображается ли главный экран. Я поместил его в свой блог , провел тест на моем Desire, и он отлично работает. Метод состоит в том, чтобы запросить у Android все установленные пакеты, один из которых содержит способность «Launcher», а затем проверить, находится ли он на вершине работающего стека. Если кто-то тестировал, дайте мне знать и результат, так как у меня нет доступа к другим устройствам Android.

6
ответ дан 28 November 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: