Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
#1

Периодический alarm не срабатывает

09.01.2017, 12:59. Просмотров 493. Ответов 15
Метки нет (Все метки)

Нужно установить alarm с некой периодичностью. Когда устанавливаю на 15 сек, то все работает отлично
Java
1
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 15000, pendingIntent);
Когда ставлю периодичность по больше, ставил на 3 часа, то будильник не срабатывает
Java
1
alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 10800000, pendingIntent);
Единственный нюанс, будильник ставился около 23-00. Получается, что я влепил будильник на 26-00, а не 2-00?
Хотя к методу currentTimeMillis() написано, что он Returns the current time in milliseconds since January 1, 1970 00:00:00.0 UTC.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2017, 12:59
Ответы с готовыми решениями:

Alarm не срабатывает через заданный промежуток времени
Всех приветствую. Мне нужно написать будильник. Для решения этой задачи я решил...

Alarm Manager
Здравствуйте . Подскажите , правильно ли я понимаю что "Alarm Manager "не...

Отменить Alarm
Я сел делать будильник, и встретился c AlarmManager. Все вроде прекрасно, и...

Не удаляется Alarm
Запускаю Alarm так intent = new Intent(context, MyAlarmReceiver.class);...

Ошибки в коде. Alarm Manager
Идея: в определенное время выводит нотификейшен с определенным текстом. Не...

15
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
09.01.2017, 13:09 #2
Mazilo, со временем все нормально - там будет 2-00, а не 26-00, причина в чем-то другом. как вариант - ваше приложение умерло за это время.
0
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
09.01.2017, 13:18  [ТС] #3
vxg, а разве после того, как установлен будильник, приложения должно жить?

Добавлено через 8 минут
vxg, не, все нормально, даже после дестроя, будильник продолжает срабатывать каждые 15 сек
0
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
09.01.2017, 18:04 #4
Mazilo, по мне так может и не жить просто в соседней теме человек уверял что это может влиять, доказательств не предоставлял
0
JerryLetehen
14 / 14 / 2
Регистрация: 07.11.2015
Сообщений: 234
09.01.2017, 18:44 #5
Цитата Сообщение от vxg Посмотреть сообщение
просто в соседней теме человек уверял что это может влиять, доказательств не предоставлял
орнул чёт))

Добавлено через 4 минуты
Цитата Сообщение от Mazilo Посмотреть сообщение
то будильник не срабатывает
У меня работает, даже если я сутки прибавлю. А покажите класс, в который ведёт ваш Intent, может там чо есть?
0
Hellrider_
50 / 50 / 4
Регистрация: 12.03.2013
Сообщений: 171
09.01.2017, 19:09 #6
Какая версия ведра? Под разные версии есть свои нюансы инициилизации таймеров. Советую почитать https://habrahabr.ru/post/274169/ и про новые чудесные изменения в 6 версии https://habrahabr.ru/post/269491/
0
Mazilo
36 / 36 / 72
Регистрация: 31.10.2014
Сообщений: 206
10.01.2017, 16:25  [ТС] #7
JerryLetehen, есть некий класс, в котором определены вспомогательные методы для всего приложения. В этом классе и определен метод установки alarm'a
Java
1
2
3
4
5
6
public static void setAlarm(Context context, int time) {
        Intent alarmIntent = new Intent(context, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, time, alarmIntent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + time, pendingIntent);
}
Ресивер запускает сервис
Java
1
2
3
4
5
6
7
public class AlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        Intent startService = new Intent(context, MyService.class);
        context.startService(startService);
    }
}
В файле AndroidManifest.xml ресивер и сервис определены так
XML
1
2
3
4
5
6
7
<receiver
            android:name=".receiver.AlarmReceiver">
        </receiver>
 
        <service
            android:name=".service.MyService">
        </service>
После того как сервис отработает он снова устанавливает Alarm
Java
1
Utility.setAlarm(getBaseContext(), time);
0
spider1581
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
11.01.2017, 18:59 #8
Mazilo, я так понял, что должен запускаться сервис по аларму. Предположу, что ОС за время простоя (3 часа) засыпает и пропускает ваш будильник. Попробуйте Сделать так:
1. Объявить
Java
1
private PowerManager pm;
в классе Alarma.
2. В методе аларма
Java
1
2
3
4
5
6
@Override
public void onReceive(Context context, Intent intent) {
      PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
      PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "YOUR TAG");
      wl.acquire();
}
Данная процедура позволит будить процессор, когда он засыпает.
3. Не забываем сделать
Java
1
2
3
4
5
6
    
@Override
public void onDestroy() {
    super.onDestroy();
    wl.release();
}
При убиении нашего аларма.
4. В манифесте добавляем
XML
1
<uses-permission android:name="android.permission.WAKE_LOCK"
0
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
12.01.2017, 09:23 #9
spider1581, этот код аннигилирует вашу батарею, не делайте так
0
spider1581
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
12.01.2017, 09:42 #10
vxg, если использовать с умом, то ничего страшного не произойдет. Приложение научится будить телефон в нужное время. Предложите ваш вариант решения проблемы ТС.
0
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
12.01.2017, 13:40 #11
spider1581, проблема ТС пока не локализована. что касается вашего решения то оно явно пренебрегает вашим же советом использовать с умом: вы должны были разбудить процессор, сделать дело и уложить его спать - оставлять процессор активным после выполнения задачи до момента удаления не совсем понял чего именно в вашем случае (активити или сервиса или приложения - сути это не меняет) - безрассудно - в общем случае мы понятия не имеем сколько они будут работать, более того - в некоторых случаях вообще не гарантируется onDestroy. результат - телефон с вечно разбуженным процессором сажает батарею
2
spider1581
3 / 3 / 2
Регистрация: 30.09.2014
Сообщений: 50
12.01.2017, 13:59 #12
vxg, согласен, код требует доработки. С усыпление процессора хорошее замечание.
0
КВА696
37 / 37 / 13
Регистрация: 20.04.2014
Сообщений: 662
Завершенные тесты: 2
14.01.2017, 11:02 #13
О как удачно я зашел)) жаль только вопрос тут не раскрыли что делать если программу вообще закрыли через настройки.

Добавлено через 6 минут
И я не просто покричал а даже сослался на вот эту тему AlarmManager не работает после закрытия приложения
Аларм работает нормально пока программу не остановить через настройки - приложения
0
vxg
Модератор
3236 / 2040 / 319
Регистрация: 13.01.2012
Сообщений: 7,898
14.01.2017, 18:33 #14
КВА696, если мне не изменяет память то я тоже прокричал что возможно дело в том что мы засунули в аларм
1
КВА696
14.01.2017, 18:34
  #15

Не по теме:

vxg, Не изменяет))) но ответ я пока не нашел да в принципе особо и не искал))

0
vxg
14.01.2017, 20:15     Периодический alarm не срабатывает
  #16

Не по теме:

КВА696, как то делал такое - приложение делало запуск обновленного пакета через аларм. то есть ставился аларм на то приложение которое будет устанавливаться вместо текущего, потом человек заменял приложение на его обновление и аларм поднимал обновленное приложение. подробности память не сохранила, вспоминать лень

0
14.01.2017, 20:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.01.2017, 20:15
Привет! Вот еще темы с ответами:

Уведомления в заданное время без Alarm
Пытаюсь вывести уведомление в заданное время не используя AlarmManager. Т.к....

Alarmmanager, информация о следующем установленном alarm
Здравствуйте. вопрос такой. Можно ли как нибудь получить информацию от...

Alarm broadcastIntent убивается через какое-то время
Привет! Я разрабатываю приложение похожее на будильник. Я использую Android...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru