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

Обсуждение уроков
dvor85
Сообщения: 1
Зарегистрирован: 05 ноя 2013, 11:44

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

Сообщение dvor85 » 04 дек 2013, 11:42

Опечатка в уроке в разделе отмена:
Все сохраним, запустим, жмем Button1. Появилось уведомление. Теперь жмем Button2. pIntent2 отменился
pIntent1 отменился.

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

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

Сообщение damager82 » 04 дек 2013, 22:33

dvor85 писал(а):Опечатка в уроке в разделе отмена:
Все сохраним, запустим, жмем Button1. Появилось уведомление. Теперь жмем Button2. pIntent2 отменился
pIntent1 отменился.
Спасибо, пофиксил!
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

andrew_21_12
Сообщения: 4
Зарегистрирован: 14 окт 2013, 20:51

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

Сообщение andrew_21_12 » 08 янв 2014, 11:12

странное дело: есть виджет с обновлением через каждые 30 секунд. тестировал на двух телефонах - исправно работает уже вторую неделю. но на планшете (Galaxy Tab 2) внезапно перестаёт обновляться через некоторое неопределённое время. используется только один PendingIntent, поэтому конфликтов вроде не должно быть. также думал, что проблема происходит из-за того, что меняю системное время на планшете: чтобы исправить, поставил в AlarmManager тип AlarmManager.ELAPSED_REALTIME_WAKEUP вместо AlarmManager.RTC. при изменении системного времени работает, но, опять-таки, проверяя работу через день-другой, обновления виджета слетают.

реализация, как в уроке:

[syntax=java]public void onEnabled(Context context) {
super.onEnabled(context);

// ставим обновление виджетов каждые 30 секунд
Intent updateIntent=new Intent(context, MainWidget.class);
updateIntent.setAction(ACTION_UPDATE_ALL_WIDGETS);
PendingIntent updatePendingIntent=PendingIntent.getBroadcast(context, REQUEST_CODE, updateIntent, 0);
am=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 30000, updatePendingIntent);
}[/syntax]

[syntax=java]public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);

// получаем и обрабатываем запрос на обновление виджетов
if (intent.getAction().equalsIgnoreCase(ACTION_UPDATE_ALL_WIDGETS)) {
ComponentName thisAppWidget=new ComponentName(context.getPackageName(), getClass().getName());
AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);
int ids[]=appWidgetManager.getAppWidgetIds(thisAppWidget);
for (int widgetID : ids) {
updateWidget(context, appWidgetManager, widgetID);
}
}
}[/syntax]

[syntax=java]public void onDisabled(Context context) {
super.onDisabled(context);

// убираем обновление виджетов, т.к. у нас их больше нет
Intent updateIntent=new Intent(context, MainWidget.class);
updateIntent.setAction(ACTION_UPDATE_ALL_WIDGETS);
PendingIntent updatePendingIntent=PendingIntent.getBroadcast(context, REQUEST_CODE, updateIntent, 0);
am=(AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
am.cancel(updatePendingIntent);
}[/syntax]

есть идеи?


upd: разобрался, сие происходит после ручной/автоматической очистки памяти системой. тогда нужно найти способ проверять жизнеспособность AlarmManager`a, и запускать его снова в случае падения
Последний раз редактировалось andrew_21_12 09 янв 2014, 11:13, всего редактировалось 1 раз.

jorik31
Сообщения: 2
Зарегистрирован: 08 янв 2014, 15:42

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

Сообщение jorik31 » 08 янв 2014, 15:50

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

jorik31
Сообщения: 2
Зарегистрирован: 08 янв 2014, 15:42

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

Сообщение jorik31 » 08 янв 2014, 21:37

разобрался нашел решение)

kipish_lp
Сообщения: 1
Зарегистрирован: 26 мар 2014, 14:26

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

Сообщение kipish_lp » 26 мар 2014, 14:42

Здравствуйте! Подскажите пожалуйста, как можно в alarmmanager сделать так, чтобы повторяющийся ежедневно будильник не срабатывал в определённые дни?

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

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

Сообщение damager82 » 02 апр 2014, 09:04

kipish_lp писал(а):Здравствуйте! Подскажите пожалуйста, как можно в alarmmanager сделать так, чтобы повторяющийся ежедневно будильник не срабатывал в определённые дни?
Поставьте проверку в коде, который вызывается этим будильником: если день не тот, то на выход.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

burovalex
Сообщения: 29
Зарегистрирован: 12 июл 2013, 12:11

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

Сообщение burovalex » 13 апр 2014, 10:26

Братцы, помогите понять где я накосячил
Вложения
1.jpg
1.jpg (247.47 КБ) 14919 просмотров

burovalex
Сообщения: 29
Зарегистрирован: 12 июл 2013, 12:11

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

Сообщение burovalex » 13 апр 2014, 10:34

Я уверен что чего-то не хватает в манифесте :?
Вложения
1.jpg
1.jpg (55.42 КБ) 14919 просмотров

siberprogs
Сообщения: 93
Зарегистрирован: 05 мар 2014, 06:20

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

Сообщение siberprogs » 13 апр 2014, 10:38

Да нет манифест тут ни причем. Это не ошибка, это предупреждение что метод устарел. Можно не обращать внимание, на уроки это не влияет.
Linux Fedora RFRemix + Intellij Idea

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 16 июн 2014, 15:02

Добрый день!

подскажите пожалуйста как установить одноразовый alarm на нужное время?

am.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, pIntent1);

то есть во втором параметре задать к примеру 17 июня 2014 года 15:35:00

и чтобы правильно все было с часовым поясом, а то currentTimeMillis

This method always returns UTC times, regardless of the system's time zone

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 16 июн 2014, 15:15

n0tb0dy писал(а):Добрый день!

подскажите пожалуйста как установить одноразовый alarm на нужное время?

am.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, pIntent1);

то есть во втором параметре задать к примеру 17 июня 2014 года 15:35:00

и чтобы правильно все было с часовым поясом, а то currentTimeMillis

This method always returns UTC times, regardless of the system's time zone
http://bit.ly/1q3IHdN
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 16 июн 2014, 16:01

извините.. пробовал искать по другому словосочетанию

спасибо

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 16 июн 2014, 17:29

и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?

тут говорят, что нет
http://stackoverflow.com/questions/2194 ... ive-alarms

но может они ошибаются?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 16 июн 2014, 18:38

n0tb0dy писал(а):и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?

тут говорят, что нет
http://stackoverflow.com/questions/2194 ... ive-alarms

но может они ошибаются?
теоретически можно просмотреть колличество обращений к классу AlarmManager в системе, но уровень доступа нужен другой, через NDK проще должно быть поидее активность dalvik мониторить, но я не совсем уверен как.. а вообще ничего невозможного нет, вопрос в цене ;)
Изображение

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 16 июн 2014, 19:48

кстати по поводу моего вопроса установки аларма на нужное время

везде приводится достаточно нудный и долгий код вроде этого

[syntax=java]
Intent intent = new Intent(AlarmActivity.this, MyBroadcastReceiver.class);
intent.putExtra("Hekma", "One better than none");
PendingIntent pintent = PendingIntent.getService(AlarmActivity.this, 0,intent, 0);
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar cal = Calendar.getInstance();

cal.set(Calendar.HOUR_OF_DAY, 20);
cal.set(Calendar.MINUTE, 15);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent);
[/syntax]

вот тут примеры

http://stackoverflow.com/questions/8929 ... of-the-day

и этот кстати не плохой примерчик
http://android-er.blogspot.ru/2012/05/c ... -time.html

но как то это нудно заморачиваться мне было с календарем

опытным путем сделал так, это просто пример, мож кому сгодится
к текущему времени прибавляет пять секунд и ставит аларм
но вообще время можно взять любое на текущий день

[syntax=java]
Date td = new Date();
Long diff = (long) (1000 * 5);
long dateInLong = adt.getTime();
am1.set(AlarmManager.RTC_WAKEUP, dateInLong, pi);
[/syntax]

мож я где то не прав, но в моей задаче работает хорошо

или пусть меня старшие товарищи поправят

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 17 июн 2014, 08:49

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

подскажите как такое может быть реализовано?

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 17 июн 2014, 18:35

n0tb0dy писал(а):и еще один вопрос по поводу алармов, если нельзя посмотреть все алармы установленные в системе, то как же работают стандартные будильники в том же самом самсунг?
ведь они устанавливаются и отменяются и сохраняются при перезагрузках, и можно поставить сколько угодно будильников и отменить любой из них

подскажите как такое может быть реализовано?
Можно запускать будильники при загрузке девайса (http://developer.android.com/reference/ ... _COMPLETED - гугли это). Соответственно чтобы их загрузить их нужно где-то сохранить (можно в преференсах, но вероятно лучше в бд). В уроке рассмотрен метод для отмены будильника.

Аватара пользователя
n0tb0dy
Сообщения: 135
Зарегистрирован: 14 фев 2014, 09:42

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

Сообщение n0tb0dy » 17 июн 2014, 22:24

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

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

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

Сообщение klblk » 18 июн 2014, 05:42

Если при перезагрузки вы восстанавливаете свои будильники, то вы просто обязаны знать какие будильники запущены (вы же их где-то сохраняете), следовательно искать их не нужно. Но как вариант попробовать создать PendingIntent с "action" искомого будильника с флагом FLAG_NO_CREATE. И если он будет null, то будильника нет.
А для отмены нужно создать PendingIntent c помощью интент с тем же "action" (что и у будильника, который нужно отменить), создать на его основе будильник с флагом FLAG_UPDATE_CURRENT, и сразу же его отменить методом cancel. Вероятно есть более эффективный способ.

То что пришло на ум после прочтения урока.

Ответить