Пожалуйста, прочитайте описание EKEvent
(в стандартной структуре EKEvent), они упоминают
@discussion. Пока статус предлагает четыре разных значения в перечислении EKEventStatus, на практике это единственное действующее и надежный статус отменяется. Любой другой статус должен считаться информативным в лучшем случае. Вы не можете установить это свойство. Если вы хотите отменить событие, вы должны просто удалить его с помощью removeEvent:.
blockquote>, поэтому вам нужно удалить это событие, если вы хотите отменить
Чтобы предотвратить обновление при выключенном экране, используйте 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
Я нашел это в проекте под названием 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.