Форум программистов, компьютерный форум, киберфорум
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Mazilo
36 / 36 / 44
Регистрация: 31.10.2014
Сообщений: 206
#1

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

09.01.2017, 12:59. Просмотров 467. Ответов 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 не срабатывает (Программирование Android):

Не удаляется Alarm - Программирование Android
Запускаю Alarm так intent = new Intent(context, MyAlarmReceiver.class); intent.setAction(action); intent.putExtra("WID",...

Отменить Alarm - Программирование Android
Я сел делать будильник, и встретился c AlarmManager. Все вроде прекрасно, и сделал Receiver, и устанавливаю время звонка и все это...

Alarm Manager - Программирование Android
Здравствуйте . Подскажите , правильно ли я понимаю что "Alarm Manager "не рекомендуют использовать начиная API 19 (KITKAT)? Note: The...

Ошибки в коде. Alarm Manager - Программирование Android
Идея: в определенное время выводит нотификейшен с определенным текстом. Не могу понять почему не работает. Сделано на старой версии...

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

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

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

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

Добавлено через 4 минуты
Цитата Сообщение от Mazilo Посмотреть сообщение
то будильник не срабатывает
У меня работает, даже если я сутки прибавлю. А покажите класс, в который ведёт ваш Intent, может там чо есть?
0
Hellrider_
50 / 50 / 2
Регистрация: 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 / 44
Регистрация: 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 / 0
Регистрация: 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
Модератор
3222 / 2025 / 231
Регистрация: 13.01.2012
Сообщений: 7,851
12.01.2017, 09:23 #9
spider1581, этот код аннигилирует вашу батарею, не делайте так
0
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
12.01.2017, 09:42 #10
vxg, если использовать с умом, то ничего страшного не произойдет. Приложение научится будить телефон в нужное время. Предложите ваш вариант решения проблемы ТС.
0
vxg
Модератор
3222 / 2025 / 231
Регистрация: 13.01.2012
Сообщений: 7,851
12.01.2017, 13:40 #11
spider1581, проблема ТС пока не локализована. что касается вашего решения то оно явно пренебрегает вашим же советом использовать с умом: вы должны были разбудить процессор, сделать дело и уложить его спать - оставлять процессор активным после выполнения задачи до момента удаления не совсем понял чего именно в вашем случае (активити или сервиса или приложения - сути это не меняет) - безрассудно - в общем случае мы понятия не имеем сколько они будут работать, более того - в некоторых случаях вообще не гарантируется onDestroy. результат - телефон с вечно разбуженным процессором сажает батарею
2
spider1581
3 / 3 / 0
Регистрация: 30.09.2014
Сообщений: 50
12.01.2017, 13:59 #12
vxg, согласен, код требует доработки. С усыпление процессора хорошее замечание.
0
КВА696
37 / 37 / 6
Регистрация: 20.04.2014
Сообщений: 656
Завершенные тесты: 2
14.01.2017, 11:02 #13
О как удачно я зашел)) жаль только вопрос тут не раскрыли что делать если программу вообще закрыли через настройки.

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

Не по теме:

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

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

Alarm manager не запускается чаще чем раз в час - Программирование Android
Есть сервис с Alarm manager'ом package com.ww4u.orderbook2; import android.app.AlarmManager; import...

Снова Alarm Manager: как запустить на API выше 19-го? - Программирование Android
Задача, нужно что бы задание выполнялось в определенное время с интервалом в один день, если правильно понял отсюда -...

Периодический опрос по url - Программирование Android
Доброго времени суток. Вопрос я беру данные с текстового документа хранящегося на сервер, каким образом можно зациклить get запрос? ...

Сделать периодический GET-запрос - Программирование Android
Есть действие, к примеру гет запрос, я хочу сделать как во многих играх - сделать счетчик, который делает действие доступным при истечении,...


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

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

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