Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
#1

Выводить оповещения в заданное время - Программирование Android

29.12.2015, 11:19. Просмотров 646. Ответов 13
Метки нет (Все метки)

Здравствуйте.
Нужно выводить оповещения в заданное время, создаю сервис через alarmManager, однако, если добавить несколько оповещений, срабатывает только последнее. Также, если выключить устройство, оповещение не срабатывает.
Подскажите, пожалуйста.
Java
1
2
3
4
final AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent myIntent = new Intent(this, MyService.class);
final PendingIntent pendingIntent = PendingIntent.getService(Information.this, 0, myIntent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

http://www.cyberforum.ru/android-dev/thread1557088.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2015, 11:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выводить оповещения в заданное время (Программирование Android):

Уведомления в заданное время без Alarm
Пытаюсь вывести уведомление в заданное время не используя AlarmManager. Т.к....

Как запустить метод в заданное время
Доброго времени суток) Борюсь над задачей, в которой нужно, чтобы в указанное...

Переход между Activity через заданное время. Как лучше?
Добрый день. Вопрос от новичка. Какую задачу хотел решить: появляется...

Локальная система оповещения пользователя
Коллеги, доброго времени суток! Необходим совет по разработке модуля,...

Логика для SMS оповещения
Помогите кое что прояснить. Допустим хочу создать программу которая как только...

13
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
29.12.2015, 11:43 #2
http://startandroid.ru/ru/uroki/vse-...rmmanager.html

Добавлено через 44 секунды
+ broadcast чтобы запускать AlarmManager после загрузки устройства.
0
DarkVortex
103 / 69 / 19
Регистрация: 07.07.2014
Сообщений: 240
29.12.2015, 15:45 #3
Прилежение может иметь только 1 alarm manager.
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
29.12.2015, 18:11  [ТС] #4
requestCode нужно было указать, спасибо. Только теперь появляются оба оповещения, но в статус баре заменяют друг друга, то есть показывается сначала одно, потом заменяется следующим почему-то. По поводу broadcast'а не понял, там флаг указать нужно? Или явно писать процедуру, которая выполнится после загрузки?
0
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,072
30.12.2015, 09:07 #5
Цитата Сообщение от ExFau$t Посмотреть сообщение
По поводу broadcast'а не понял
https://www.google.ru/search?q=site:...ager broadcast
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
31.12.2015, 12:08  [ТС] #6
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class MyService extends BroadcastReceiver {
 
 
 
    @Override
    public void onReceive(Context context, Intent intent) {
        NotificationUtils n = NotificationUtils.getInstance(context);
        n.createInfoNotification("Cобытие...");
    }
 
    public void SetAlarm(Context context, Calendar calendar, PendingIntent pendingIntent) {
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    }
 
    public void CancelAlarm(Context context, PendingIntent pendingIntent){
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
    }
}
Создаю сервис так, оповещения работают, после перезагрузки - нет, если в onReceive дописать метод создания alarm'a, то он срабатывает мгновенно.
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
31.12.2015, 12:57 #7
ExFau$t, это нужен еще один BroadcastReceiver, который будет ловить сообщения о запуске системы.
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
31.12.2015, 13:09  [ТС] #8
Spelcrawler, так это и не пойму, что нужно сделать, чтобы ловить эти сообщения и при запуске что-то сделать? В том виде, что есть он по идее должен создать оповещение сразу же после запуска, без аларма. В манифесте уже все перебрал:
XML
1
2
3
4
5
6
<receiver android:name=".MyService"
            android:enabled="true">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
31.12.2015, 13:17 #9
ExFau$t, должно быть два ресивера: один ловит сообщение от аларм менеджера, другой сообщение о загрузке (то что выше у вас в манифесте). Первый при получении сообщения показывает уведомление, второй запускает аларм менеджер.
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
31.12.2015, 13:18  [ТС] #10
Spelcrawler, оба описать в манифесте и тот, что вызывает аларм никак не вызывается в активностях?
0
Spelcrawler
531 / 501 / 113
Регистрация: 12.03.2014
Сообщений: 1,666
Завершенные тесты: 1
31.12.2015, 13:23 #11
ExFau$t, да, именно так.
1
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
31.12.2015, 14:13  [ТС] #12
Spelcrawler, а в intent этого ресивера с алармом можно экстра данные передать?
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
08.01.2016, 12:42  [ТС] #13
Не работает все равно после перезагрузки:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public class AlarmReceiver extends BroadcastReceiver {
    SharedPreferences sp;
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context,"dg",Toast.LENGTH_LONG).show();
        sp = context.getSharedPreferences("my_settings", Context.MODE_PRIVATE);
        for (int i=0;i<sp.getInt("NomOfNotif", 0);i++) {
            PendingIntent pendingIntent = PendingIntent.getBroadcast(context, sp.getInt("idnotif" + Integer.toString(i), 0), intent, 0);
            final MyService alarm = new MyService();
            alarm.SetAlarm(context, sp.getLong("timenotif" + Integer.toString(i), 0), pendingIntent);
        }
    }
}
0
ExFau$t
516 / 471 / 101
Регистрация: 08.05.2012
Сообщений: 2,373
20.01.2016, 12:06  [ТС] #14
Для работы ресивера есть требования к версии ОС?
0
20.01.2016, 12:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2016, 12:06
Привет! Вот еще темы с решениями:

Срабатывание оповещения в определенное время
Доброго времени суток. Не могли бы вы подсказать, как сделать так, чтобы...

Выводить текущее время в определенные позиции консоли во время работы
Портирую консольное приложение. Есть код, который работал после компиляции в...

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

Получить время с удалённого компьютера и перезагрузить его, если время превышает заданное
Доброго времени суток всем Вам! Многим из вас моя проблема покажется крайне...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru