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

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

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

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

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

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

Добавлено: 08 янв 2014, 11:12
andrew_21_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, и запускать его снова в случае падения

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

Добавлено: 08 янв 2014, 15:50
jorik31
Всем привет
вопрос такой,не совсем по теме
подскажите пожалуйста как можно задать время или таймер для кнопки чтобы кнопка появлялась и исчезала через определенное время

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

Добавлено: 08 янв 2014, 21:37
jorik31
разобрался нашел решение)

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

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

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

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

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

Добавлено: 13 апр 2014, 10:26
burovalex
Братцы, помогите понять где я накосячил

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

Добавлено: 13 апр 2014, 10:34
burovalex
Я уверен что чего-то не хватает в манифесте :?

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

Добавлено: 13 апр 2014, 10:38
siberprogs
Да нет манифест тут ни причем. Это не ошибка, это предупреждение что метод устарел. Можно не обращать внимание, на уроки это не влияет.

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

Добавлено: 16 июн 2014, 15:02
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

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

Добавлено: 16 июн 2014, 15:15
altwin
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

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

Добавлено: 16 июн 2014, 16:01
n0tb0dy
извините.. пробовал искать по другому словосочетанию

спасибо

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

Добавлено: 16 июн 2014, 17:29
n0tb0dy
и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?

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

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

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

Добавлено: 16 июн 2014, 18:38
altwin
n0tb0dy писал(а):и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?

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

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

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

Добавлено: 16 июн 2014, 19:48
n0tb0dy
кстати по поводу моего вопроса установки аларма на нужное время

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

[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]

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

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

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

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

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

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

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

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

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

Добавлено: 17 июн 2014, 22:24
n0tb0dy
как сохранять работу бидильника при перезагрузке я знаю, но как выбирать нужный из нескольких работающих я не знаю, то есть вопрос в том как после перезагрузки найти свои работающие будильники и убрать их если надо

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

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

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