Тревога:
Вы можете запланировать ожидающее намерение, которое управляет тем, что вы хотите, когда срабатывает сигнализация.Процесс такой:
Определите, как часто вы хотите, чтобы сработала сигнализация.Вы можете стрелять в точное время, через определенное время (через 10 секунд ...) или через определенное повторение с интервалом (каждые x секунд / минут / и т.д.).Вы также можете установить определенное время, чтобы начать процесс повторения.Интервал не является переменным.Затем вы должны сделать один выстрел и установить другой будильник на следующий раз.Вы также можете установить флаги, которые определяют формат времени (миллис, RTC, ...).Наконец, вы можете включить сигнализацию, чтобы разбудить устройство или дать ему поспать и запланировать его при следующем пробуждении телефона.
Теперь о том, что запланировано.Запланированное намерение запланировано.Ожидающее намерение пробуждает широковещательный приемник.Вот некоторые фрагменты кода, которые я использую для включения таймера в 1 минуту после полуночи ежедневно.(Он обновляет виджет, который должен обновляться ежедневно.)
Intent intent = new Intent(context, DaysReceiver.class);
PendingIntent receiverIntent = PendingIntent.getBroadcast(context,
DaysConstants.UPDATE_ALARM,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Schedule the alarm!
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(receiverIntent);
if (cancelAlarm) {
MyLog.d(TAG, "setAlarm cancel");
return;
}
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
JodaTime jtime = new JodaTime();
am.set(AlarmManager.RTC_WAKEUP, jtime.afterMidnight(), receiverIntent);
//am.setRepeating(AlarmManager.RTC_WAKEUP, jtime.nowPlusMillis(30 * 1000),
// 30 * 1000, receiverIntent);
MyLog.d(TAG, "setAlarm set");
}
Класс JodaTime выполняет вычисления даты и времени.вышеприведенный бит afterMidnight () возвращается через 1 минуту после полуночи.Эта процедура может быть использована только для отмены неподтвержденного сигнала тревоги.
Приемник - это обычный приемник вещания, и вы можете делать в нем все, что можете делать в любом другом приемнике вещания.(Не забудьте поместить обычные вещи в манифест. Разрешения и тому подобное.
Вот получатель, который я использую меньше импорта. Это довольно просто. Он захватывает все виджеты, которые включеныДомашние экраны и их обновление. Процедура обновления является статической функцией в поставщике виджетов. Это класс, потому что он управляется из двух мест. Конфигурация виджета и поставщик виджетов. Таймер переносится каждые 24 часа.жить через загрузку, но провайдер при обновлении запускается при перезагрузке. (Все, что происходит, это то, что выполняются вычисления нового дня и обновляется отображение виджета.) Вы можете сбросить мой код и добавить startActivity. Ой. Почти забыл.Используйте PendingIntent.FLAG_UPDATE_CURRENT, чтобы у вас не было случайно скопировано несколько намерений ...
public class DaysReceiver extends BroadcastReceiver {
static String TAG = "DaysReceiver";
@Override
public void onReceive(Context context, Intent intent) {
MyLog.d(TAG, "onReceive");
updateWidgets(context);
}
private void updateWidgets(Context context) {
MyLog.d(TAG, "updateWidgets");
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context, DaysProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
final int N = appWidgetIds.length;
if (N < 1) {
MyLog.d(TAG, "No widgets");
return;
}
for (int i = 0; i < N; i++) {
MyLog.d(TAG, "Update widget " + Integer.toString(appWidgetIds[i]));
DaysProvider.updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
}
}
}
Надеюсь, я не слишком много путешествовал, но я тороплюсьчтобы вернуться к другому делу. У меня нет времени, чтобы действительно отредактировать сообщение. Надеюсь, это помогло ...