Запускать функцию в первый день каждого месяца

Я хочу запускать функцию из своего Android-приложения в определенное время (скажем, в 8 утра) первого числа каждого месяца. Функция, в зависимости от предпочтений пользователя, либо отправит уведомление, либо начнет загрузку файла через Интернет (и то, и другое уже выполнено), либо ничего не сделает.

Я пробовал использовать BroadcastReceiver с действием android.intent.action.DATE_CHANGED, но я читал, что он запускается только тогда, когда пользователь меняет дату вручную (хотя даже тогда он работал первые 2-3 раза, когда я пытался, а затем перестал работать). Я думаю, что AlarmManager сможет делать то, что мне нужно, но не совсем понимает, как это реализовать.

Это должно работать независимо от того, активно / запущено мое приложение. Как это сделать оптимально? Мы будем благодарны за любой вспомогательный код.


person swarajk1    schedule 28.05.2014    source источник
comment
Подробнее о фоновых службах: developer.android.com/training/run- background-service /, тогда вы можете просто получить системную дату с помощью таймера и магии   -  person Aboca    schedule 28.05.2014
comment
@Aboca, будет ли он тогда непрерывно отслеживать время в течение целого месяца в ожидании волшебства? Не проблема, но похоже, что процессор слишком загружен для небольшой задачи. Использую пока, чтобы уложиться в срок.   -  person swarajk1    schedule 28.05.2014
comment
Таймер может быть либо диспетчером аварийных сигналов, либо простым обработчиком (следовало бы использовать более подходящее слово), на самом деле не использовал диспетчер аварийных сигналов, но это может сработать для вас. Я полагаю, вы уже заглянули в это, но если вы не читали это: разработчик. android.com/training/scheduling/alarms.html Я не использовал будильники, поэтому не могу дать вам хороший старт: извините   -  person Aboca    schedule 28.05.2014


Ответы (2)


Просто запустите службу при запуске. В сервисе вы могли проверить дату в другой ветке.

person zhenghuiyan    schedule 28.05.2014

Используйте будильник

alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis()/*now*/, TIME_REPEATING, pendingIntent);

TIME_REPEATING будет вашим вычислением первого дня месяца, а pendingIntent - вашей службой для запуска задачи.

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

person Sulfkain    schedule 28.05.2014