Урок 119. PendingIntent – флаги, requestCode. AlarmManager

Обсуждение уроков
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 119. PendingIntent – флаги, requestCode. AlarmManager

Сообщение damager82 » 03 фев 2013, 23:00

В этом уроке:
- подробно разбираемся с PendingIntent
- используем AlarmManager


Click here to read this article!
Последний раз редактировалось damager82 25 май 2017, 13:42, всего редактировалось 7 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение powercat » 04 фев 2013, 11:10

Эх...на неделю б раньше, я б лишний день не мучался )))
Еще надо сказать, что сброс всех алармов, связанных с одним и тем же интентом, надо делать для них всех, и ориентироваться именно на requestCode. Может ты это и написал, но я не вчитывался.

Andy_ua
Сообщения: 21
Зарегистрирован: 06 июл 2012, 17:23

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение Andy_ua » 05 фев 2013, 20:11

>После перезагрузки устройства все будильники стираются.
как это обработать, если пишем свой будильник?
хранить события в локальной базе, и после перезапуска девайса запускать сервис, который создаст все alarm?

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение powercat » 05 фев 2013, 20:36

Все просто - бутресивером ловишь загрузку и восстанавливаешь свой будильник )) ну, т.е. создаешь аларм по-новой...а вот как ты это реализуешь...уууууу....а представь, что юзер начал играть со временем телефона, на пару дней сдвинул даты и время )))

Сначала продумываешь алгоритм, как это все сработает, потом уже его описываешь...получается такая забавная схема с К У Ч Е Й стрелок )))

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение neoksi » 08 фев 2013, 16:51

Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение damager82 » 09 фев 2013, 22:23

neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Это ж флаг Intent. Отдельная огромная тема.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение neoksi » 09 фев 2013, 23:06

damager82 писал(а):
neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Это ж флаг Intent. Отдельная огромная тема.
Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение damager82 » 14 фев 2013, 13:28

neoksi писал(а):
damager82 писал(а):
neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Это ж флаг Intent. Отдельная огромная тема.
Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.
А можно пример? Я пока такого поведения не встречал.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение neoksi » 14 фев 2013, 14:24

damager82 писал(а):
neoksi писал(а):
damager82 писал(а):
neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Это ж флаг Intent. Отдельная огромная тема.
Но как выяснилось, опытным путем, при работе с AlarmManager его нужно использовать, чтоб не утерялись экстра данные Intent.
А можно пример? Я пока такого поведения не встречал.
Тут я приводил пример кода с URI для AlarmManager и флаг в нем используется не просто так
viewtopic.php?f=38&t=1587#p8732

Сейчас точно не вспомню, но вроде флаг выставлялся для предотвращения случаев с перезаписью URI и для гарантирования, что он будет доставлен в ресивер.

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение powercat » 19 фев 2013, 16:40

Не обязательно его ставить, у меня ури передается и читается с флагом 0 в интенте...Хотя наверное надо рассматривать каждый случай особо, что там ПЕРЕД и ПОСЛЕ происходит

Каюсь, действительно, надо его ставить, иначе косяки ((( с чтением data

Аватара пользователя
powercat
Сообщения: 508
Зарегистрирован: 20 июл 2012, 11:31

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение powercat » 11 мар 2013, 12:22

Если при задании аларма делать так:

Код: Выделить всё

PendingIntent pi=PendingIntent.getBroadcast(context, code, intent,PendingIntent.FLAG_UPDATE_CURRENT);
то использование am.cancel(); работает нормально, и аларм удаляется. Ури читается нормально
Если при задании аларма делать так:

Код: Выделить всё

PendingIntent pi=PendingIntent.getBroadcast(context, code, intent,Intent.FLAG_GRANT_READ_URI_PERMISSION);
то использование am.cancel(); не работает, и аларм продолжает алармить.

aptimist
Сообщения: 1
Зарегистрирован: 11 июн 2013, 10:52

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение aptimist » 11 июн 2013, 10:56

Хорошая статься, спасибо!
Такой вопрос, как чтобы по истечению времени AlarmManager выполнилось действие, допустим вызвался метод sendNotif.

P.S. с Андроидом знаком относительно недавно

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение elron » 08 авг 2013, 12:07

Вопрос: как узнать что аларм уже запущен ? Например запустить программу, запустить аларм, закрыть программу, открыть программу заново и узнать какие алармы запущены.

Аватара пользователя
elron
Сообщения: 31
Зарегистрирован: 14 окт 2012, 13:29

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение elron » 24 окт 2013, 16:41

Нужна помощь! Не получается отменить будильник:
[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", не помогает.

cvstsk
Сообщения: 1
Зарегистрирован: 09 июл 2013, 15:03

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение cvstsk » 19 ноя 2013, 10:14

вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение damager82 » 20 ноя 2013, 23:31

cvstsk писал(а):вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?
Если будильники с типом не WAKEUP должны сработать, а устройство в это время спит, то их запуск откладывается до пробуждения.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Evgeniy.Sh
Сообщения: 3
Зарегистрирован: 25 ноя 2013, 15:58

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение Evgeniy.Sh » 25 ноя 2013, 16:12

damager82 писал(а):
cvstsk писал(а):вопрос по поводу ELAPSED_REALTIME и RTC. при выходе устройства из спячки они отработают или же потеряются навсегда, если девайс спит?
Если будильники с типом не WAKEUP должны сработать, а устройство в это время спит, то их запуск откладывается до пробуждения.
Будильники с типом RTC_WAKEUP почему-то приходят в BroadcastReceiver только после того, как устройство выводится из спячки пользователем.
победил через сервис с установленным WakeLock, но это совсем как то не правильно.
Как решить проблему по другому, или хотя-бы в какую сторону копать?

Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение damager82 » 25 ноя 2013, 16:27

Evgeniy.Sh писал(а):Будильники с типом RTC_WAKEUP почему-то приходят в BroadcastReceiver только после того, как устройство выводится из спячки пользователем.
победил через сервис с установленным WakeLock, но это совсем как то не правильно.
Как решить проблему по другому, или хотя-бы в какую сторону копать?
Странно. А на какой версии вы тестировали?
Там для API 19 какие-то изменения в сторону ухода от пробуждения девайса сделали.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Evgeniy.Sh
Сообщения: 3
Зарегистрирован: 25 ноя 2013, 15:58

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение Evgeniy.Sh » 25 ноя 2013, 20:16

минимальная 17, таргет - 18, на устройстве android 4.2.2, 17 api..

Al.x
Сообщения: 14
Зарегистрирован: 20 ноя 2012, 23:36

Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag

Сообщение Al.x » 26 ноя 2013, 15:41

у меня на 17 апи, 4.2.2 сервис запускает нормально (без локов), с ресивером не скажу, но не должно быть по идее по-другому

такой вопрос, узнать список алармов или хотя бы установлен ли аларм на данный интент можно только через adb shell?
программно никак?

Ответить