pIntent1 отменился.Все сохраним, запустим, жмем Button1. Появилось уведомление. Теперь жмем Button2. pIntent2 отменился
Урок 119. PendingIntent – флаги, requestCode. AlarmManager
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Опечатка в уроке в разделе отмена:
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Спасибо, пофиксил!dvor85 писал(а):Опечатка в уроке в разделе отмена:pIntent1 отменился.Все сохраним, запустим, жмем Button1. Появилось уведомление. Теперь жмем Button2. pIntent2 отменился
-
- Сообщения: 4
- Зарегистрирован: 14 окт 2013, 20:51
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
странное дело: есть виджет с обновлением через каждые 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, и запускать его снова в случае падения
реализация, как в уроке:
[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 раз.
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Всем привет
вопрос такой,не совсем по теме
подскажите пожалуйста как можно задать время или таймер для кнопки чтобы кнопка появлялась и исчезала через определенное время
вопрос такой,не совсем по теме
подскажите пожалуйста как можно задать время или таймер для кнопки чтобы кнопка появлялась и исчезала через определенное время
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
разобрался нашел решение)
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Здравствуйте! Подскажите пожалуйста, как можно в alarmmanager сделать так, чтобы повторяющийся ежедневно будильник не срабатывал в определённые дни?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Поставьте проверку в коде, который вызывается этим будильником: если день не тот, то на выход.kipish_lp писал(а):Здравствуйте! Подскажите пожалуйста, как можно в alarmmanager сделать так, чтобы повторяющийся ежедневно будильник не срабатывал в определённые дни?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Братцы, помогите понять где я накосячил
- Вложения
-
- 1.jpg (247.47 КБ) 15557 просмотров
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Я уверен что чего-то не хватает в манифесте
- Вложения
-
- 1.jpg (55.42 КБ) 15557 просмотров
-
- Сообщения: 93
- Зарегистрирован: 05 мар 2014, 06:20
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Да нет манифест тут ни причем. Это не ошибка, это предупреждение что метод устарел. Можно не обращать внимание, на уроки это не влияет.
Linux Fedora RFRemix + Intellij Idea
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Добрый день!
подскажите пожалуйста как установить одноразовый 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
подскажите пожалуйста как установить одноразовый 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
http://bit.ly/1q3IHdNn0tb0dy писал(а):Добрый день!
подскажите пожалуйста как установить одноразовый 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
извините.. пробовал искать по другому словосочетанию
спасибо
спасибо
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?
тут говорят, что нет
http://stackoverflow.com/questions/2194 ... ive-alarms
но может они ошибаются?
тут говорят, что нет
http://stackoverflow.com/questions/2194 ... ive-alarms
но может они ошибаются?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
теоретически можно просмотреть колличество обращений к классу AlarmManager в системе, но уровень доступа нужен другой, через NDK проще должно быть поидее активность dalvik мониторить, но я не совсем уверен как.. а вообще ничего невозможного нет, вопрос в ценеn0tb0dy писал(а):и еще вопросик, как то можно посмотреть список всех установленных приложением алармов?
тут говорят, что нет
http://stackoverflow.com/questions/2194 ... ive-alarms
но может они ошибаются?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
кстати по поводу моего вопроса установки аларма на нужное время
везде приводится достаточно нудный и долгий код вроде этого
[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]
мож я где то не прав, но в моей задаче работает хорошо
или пусть меня старшие товарищи поправят
везде приводится достаточно нудный и долгий код вроде этого
[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
и еще один вопрос по поводу алармов, если нельзя посмотреть все алармы установленные в системе, то как же работают стандартные будильники в том же самом самсунг?
ведь они устанавливаются и отменяются и сохраняются при перезагрузках, и можно поставить сколько угодно будильников и отменить любой из них
подскажите как такое может быть реализовано?
ведь они устанавливаются и отменяются и сохраняются при перезагрузках, и можно поставить сколько угодно будильников и отменить любой из них
подскажите как такое может быть реализовано?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Можно запускать будильники при загрузке девайса (http://developer.android.com/reference/ ... _COMPLETED - гугли это). Соответственно чтобы их загрузить их нужно где-то сохранить (можно в преференсах, но вероятно лучше в бд). В уроке рассмотрен метод для отмены будильника.n0tb0dy писал(а):и еще один вопрос по поводу алармов, если нельзя посмотреть все алармы установленные в системе, то как же работают стандартные будильники в том же самом самсунг?
ведь они устанавливаются и отменяются и сохраняются при перезагрузках, и можно поставить сколько угодно будильников и отменить любой из них
подскажите как такое может быть реализовано?
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
как сохранять работу бидильника при перезагрузке я знаю, но как выбирать нужный из нескольких работающих я не знаю, то есть вопрос в том как после перезагрузки найти свои работающие будильники и убрать их если надо
Re: Урок 119. PendingIntent – флаги, requestCode. AlarmManag
Если при перезагрузки вы восстанавливаете свои будильники, то вы просто обязаны знать какие будильники запущены (вы же их где-то сохраняете), следовательно искать их не нужно. Но как вариант попробовать создать PendingIntent с "action" искомого будильника с флагом FLAG_NO_CREATE. И если он будет null, то будильника нет.
А для отмены нужно создать PendingIntent c помощью интент с тем же "action" (что и у будильника, который нужно отменить), создать на его основе будильник с флагом FLAG_UPDATE_CURRENT, и сразу же его отменить методом cancel. Вероятно есть более эффективный способ.
То что пришло на ум после прочтения урока.
А для отмены нужно создать PendingIntent c помощью интент с тем же "action" (что и у будильника, который нужно отменить), создать на его основе будильник с флагом FLAG_UPDATE_CURRENT, и сразу же его отменить методом cancel. Вероятно есть более эффективный способ.
То что пришло на ум после прочтения урока.