Страница 1 из 5

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

Добавлено: 03 фев 2013, 23:00
damager82
В этом уроке:
- подробно разбираемся с PendingIntent
- используем AlarmManager


Click here to read this article!

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

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

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

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

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

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

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

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

Добавлено: 08 фев 2013, 16:51
neoksi
Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.

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

Добавлено: 09 фев 2013, 22:23
damager82
neoksi писал(а):Что-то маловато флагов в уроке, я к примеру не увидел Intent.FLAG_GRANT_READ_URI_PERMISSION.
Это ж флаг Intent. Отдельная огромная тема.

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 11 мар 2013, 12:22
powercat
Если при задании аларма делать так:

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

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(); не работает, и аларм продолжает алармить.

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

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

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

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

Добавлено: 08 авг 2013, 12:07
elron
Вопрос: как узнать что аларм уже запущен ? Например запустить программу, запустить аларм, закрыть программу, открыть программу заново и узнать какие алармы запущены.

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

Добавлено: 24 окт 2013, 16:41
elron
Нужна помощь! Не получается отменить будильник:
[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

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

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

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

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

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

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

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

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

Добавлено: 25 ноя 2013, 20:16
Evgeniy.Sh
минимальная 17, таргет - 18, на устройстве android 4.2.2, 17 api..

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

Добавлено: 26 ноя 2013, 15:41
Al.x
у меня на 17 апи, 4.2.2 сервис запускает нормально (без локов), с ресивером не скажу, но не должно быть по идее по-другому

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