Урок 119. PendingIntent – флаги, requestCode. AlarmManager
Урок 119. PendingIntent – флаги, requestCode. AlarmManager
В этом уроке:
- подробно разбираемся с PendingIntent
- используем AlarmManager
Click here to read this article!
- подробно разбираемся с PendingIntent
- используем AlarmManager
Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:42, всего редактировалось 7 раз.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Эх...на неделю б раньше, я б лишний день не мучался )))
Еще надо сказать, что сброс всех алармов, связанных с одним и тем же интентом, надо делать для них всех, и ориентироваться именно на requestCode. Может ты это и написал, но я не вчитывался.
Еще надо сказать, что сброс всех алармов, связанных с одним и тем же интентом, надо делать для них всех, и ориентироваться именно на requestCode. Может ты это и написал, но я не вчитывался.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
>После перезагрузки устройства все будильники стираются.
как это обработать, если пишем свой будильник?
хранить события в локальной базе, и после перезапуска девайса запускать сервис, который создаст все alarm?
как это обработать, если пишем свой будильник?
хранить события в локальной базе, и после перезапуска девайса запускать сервис, который создаст все alarm?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Все просто - бутресивером ловишь загрузку и восстанавливаешь свой будильник )) ну, т.е. создаешь аларм по-новой...а вот как ты это реализуешь...уууууу....а представь, что юзер начал играть со временем телефона, на пару дней сдвинул даты и время )))
Сначала продумываешь алгоритм, как это все сработает, потом уже его описываешь...получается такая забавная схема с К У Ч Е Й стрелок )))
Сначала продумываешь алгоритм, как это все сработает, потом уже его описываешь...получается такая забавная схема с К У Ч Е Й стрелок )))
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Это ж флаг Intent. Отдельная огромная тема.neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.damager82 писал(а):Это ж флаг Intent. Отдельная огромная тема.neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
А можно пример? Я пока такого поведения не встречал.neoksi писал(а):Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.damager82 писал(а):Это ж флаг Intent. Отдельная огромная тема.neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Тут я приводил пример кода с URI для AlarmManager и флаг в нем используется не просто такdamager82 писал(а):А можно пример? Я пока такого поведения не встречал.neoksi писал(а):Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.damager82 писал(а):Это ж флаг Intent. Отдельная огромная тема.neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
viewtopic.php?f=38&t=1587#p8732
Сейчас точно не вспомню, но вроде флаг выставлялся для предотвращения случаев с перезаписью URI и для гарантирования, что он будет доставлен в ресивер.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Не обязательно его ставить, у меня ури передается и читается с флагом 0 в интенте...Хотя наверное надо рассматривать каждый случай особо, что там ПЕРЕД и ПОСЛЕ происходит
Каюсь, действительно, надо его ставить, иначе косяки ((( с чтением data
Каюсь, действительно, надо его ставить, иначе косяки ((( с чтением data
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Если при задании аларма делать так:
то использование am.cancel(); работает нормально, и аларм удаляется. Ури читается нормально
Если при задании аларма делать так:
то использование am.cancel(); не работает, и аларм продолжает алармить.
Код: Выделить всё
PendingIntent pi=PendingIntent.getBroadcast(context, code, intent,PendingIntent.FLAG_UPDATE_CURRENT);
Если при задании аларма делать так:
Код: Выделить всё
PendingIntent pi=PendingIntent.getBroadcast(context, code, intent,Intent.FLAG_GRANT_READ_URI_PERMISSION);
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Хорошая статься, спасибо!
Такой вопрос, как чтобы по истечению времени AlarmManager выполнилось действие, допустим вызвался метод sendNotif.
P.S. с Андроидом знаком относительно недавно
Такой вопрос, как чтобы по истечению времени AlarmManager выполнилось действие, допустим вызвался метод sendNotif.
P.S. с Андроидом знаком относительно недавно
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Вопрос: как узнать что аларм уже запущен ? Например запустить программу, запустить аларм, закрыть программу, открыть программу заново и узнать какие алармы запущены.
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Нужна помощь! Не получается отменить будильник:
[syntax=java] // вкл. будильник
protected void startAlarm(int pos) {
Log.d(myLog, "startAlarm() ");
// подготавливаем интент
iAlarm = createIntent("qwerty", "0");
piAlarm = PendingIntent.getService(c.getApplicationContext(),
0, iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, piAlarm);
}
[/syntax]
[syntax=java]
// выкл. будильник
protected void stopAlarm(int pos) {
Log.d(myLog, "stopAlarm() " + p.arrTriggersList.get(pos).getIdName());
iAlarm = createIntent("qwerty", "0");
piAlarm = PendingIntent.getBroadcast(c.getApplicationContext(),
0, iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(piAlarm);
}
[/syntax]
[syntax=java]
Intent createIntent(String idNameTrigger, String listActions) {
Intent i = new Intent(c.getApplicationContext(), TriggerService.class);
// отправляем id_name триггера
i.setAction(idNameTrigger);
return i;
}
[/syntax]
Через 5 сек после нажатия запускается. Пробовал флаги "FLAG_CANCEL_CURRENT" и "FLAG_UPDATE_CURRENT", не помогает.
[syntax=java] // вкл. будильник
protected void startAlarm(int pos) {
Log.d(myLog, "startAlarm() ");
// подготавливаем интент
iAlarm = createIntent("qwerty", "0");
piAlarm = PendingIntent.getService(c.getApplicationContext(),
0, iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, piAlarm);
}
[/syntax]
[syntax=java]
// выкл. будильник
protected void stopAlarm(int pos) {
Log.d(myLog, "stopAlarm() " + p.arrTriggersList.get(pos).getIdName());
iAlarm = createIntent("qwerty", "0");
piAlarm = PendingIntent.getBroadcast(c.getApplicationContext(),
0, iAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
am.cancel(piAlarm);
}
[/syntax]
[syntax=java]
Intent createIntent(String idNameTrigger, String listActions) {
Intent i = new Intent(c.getApplicationContext(), TriggerService.class);
// отправляем id_name триггера
i.setAction(idNameTrigger);
return i;
}
[/syntax]
Через 5 сек после нажатия запускается. Пробовал флаги "FLAG_CANCEL_CURRENT" и "FLAG_UPDATE_CURRENT", не помогает.
Часы триггер | Гденьги | Линии живые обои | Поддержите проекты
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
cvstsk писал(а):вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?
Если будильники с типом не WAKEUP должны сработать, а устройство в это время спит, то их запуск откладывается до пробуждения.
-
- Сообщения: 3
- Зарегистрирован: 25 ноя 2013, 15:58
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Будильники с типом RTC_WAKEUP почему-то приходят в BroadcastReceiver только после того, как устройство выводится из спячки пользователем.damager82 писал(а):cvstsk писал(а):вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?Если будильники с типом не WAKEUP должны сработать, а устройство в это время спит, то их запуск откладывается до пробуждения.
победил через сервис с установленным WakeLock, но это совсем как то не правильно.
Как решить проблему по другому, или хотя-бы в какую сторону копать?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Странно. А на какой версии вы тестировали?Evgeniy.Sh писал(а):Будильники с типом RTC_WAKEUP почему-то приходят в BroadcastReceiver только после того, как устройство выводится из спячки пользователем.
победил через сервис с установленным WakeLock, но это совсем как то не правильно.
Как решить проблему по другому, или хотя-бы в какую сторону копать?
Там для API 19 какие-то изменения в сторону ухода от пробуждения девайса сделали.
-
- Сообщения: 3
- Зарегистрирован: 25 ноя 2013, 15:58
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
минимальная 17, таргет - 18, на устройстве android 4.2.2, 17 api..
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
у меня на 17 апи, 4.2.2 сервис запускает нормально (без локов), с ресивером не скажу, но не должно быть по идее по-другому
такой вопрос, узнать список алармов или хотя бы установлен ли аларм на данный интент можно только через adb shell?
программно никак?
такой вопрос, узнать список алармов или хотя бы установлен ли аларм на данный интент можно только через adb shell?
программно никак?