Форум программистов, компьютерный форум, киберфорум
Программирование Android
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/15: Рейтинг темы: голосов - 15, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42

AlarmManager + Notification

06.05.2015, 17:06. Показов 3150. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Взялся за создания Нотификаций в определённое время. До этого такого ещё такого не делал, без помощи гугла не обошлось.
В фрагменте списка в onCreate вызываю метод setAlarm();
Код взят с android developers;
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public void setAlarm(){
        Log.i(TAG, "setAlarm");
 
            Intent intent = new Intent(getActivity(), AlarmReceiver.class);
            intent.setAction(Intent.ACTION_MAIN);
            intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
 
            PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), REQUEST_CODE,
                    intent, 0);
 
            int alarmType = AlarmManager.ELAPSED_REALTIME;
            final int FIFTEEN_SEC_MILLIS = 15000;
 
            AlarmManager alarmManager = (AlarmManager)
                    getActivity().getSystemService(getActivity().ALARM_SERVICE);
            
            alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS,
                    FIFTEEN_SEC_MILLIS, pendingIntent);
            Log.i("RepeatingAlarmFragment", "Alarm set.");
            //alarmManager.cancel(pendingIntent);
}
Как я понимаю, через 15 секунд должен запускаться AlarmReceiver.class.
AlarmReceiver.class:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class AlarmReceiver extends BroadcastReceiver{
    
    public static final String TAG = "AlarmReceiver";
    
    NotificationManager notificationManager;
 
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i(TAG, "onReceive");
        Intent service = new Intent(context, AlarmService.class);
        context.startService(service);
    }
    
}
Который в свою очередь запускает AlarmService.class
AlarmService.class
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public class AlarmService extends Service {
 
    private static final int NOTIFICATION_ID = 1;
    public static final String TAG = "AlarmService";
    
    private NotificationManager notificationManager;
    private PendingIntent pendingIntent;
       
    @Override
    public IBinder onBind(Intent arg0)
    {
        Log.i(TAG, "onBind");
        return null;
    }
     
    @SuppressWarnings("static-access")
    @Override
    public void onStart(Intent intent, int startId) {
        super.onStart(intent, startId);
        Log.i(TAG, "onStart");
        Context context = this.getApplicationContext();
        notificationManager = (NotificationManager)context.getSystemService(context.NOTIFICATION_SERVICE);
        Intent mIntent = new Intent(this, MainActivity.class);
        pendingIntent = PendingIntent.getActivity(context, 0, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);     
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentTitle("Title");
        builder.setContentText("content text");
        builder.setSmallIcon(R.drawable.ic_launcher);
        builder.setContentIntent(pendingIntent);
        
        notificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
        notificationManager.notify(NOTIFICATION_ID, builder.build());
    }
 
}
Но, ничего ен происходит.
Пробовал setAlarm запускать фрагмент списка - работало.. запускалась аппликация каждые 15 секунд..
Хотелось бы знать, как решить данную проблему..
И нужно ли "пробегать" через 2 класса, что-бы запустить notification..
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2015, 17:06
Ответы с готовыми решениями:

AlarmManager
Всем привет. Взял код AlarmManager отсюда. В свой проект добавил AlarmManagerBroadcastReceiver.java и код AlarmManagerActivity.java в свое...

AlarmManager
Добрый вечер, как задать время вручную ? alarmManager.set(AlarmManager.RTC, System.currentTimeMillis(), pendingIntent);

Не работает AlarmManager
Хочу выводить уведомление "через заданное время". Использую AlarmManager, в PendingIntent кладу BroadcastReceiver, в котором уже вызываю...

8
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
07.05.2015, 08:52
В манифесте Service и BroadcastReceiver зарегистрированы?
0
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 10:10  [ТС]
Сервис был не зарегистрирован.
Но, так и так ничего не происходит. Будельник поставился, судя по логкету. Но и на этом всё.
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
07.05.2015, 12:27
Ну так в PendingIntent.getActivity вы же не активити ложите, а AlarmReceiver.class.
Значит ложите AlarmService через getService.
1
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 12:55  [ТС]
Как понимаю, так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public void setAlarm(){
        Log.i(TAG, "setAlarm");
 
        Intent intent = new Intent(context, AlarmReceiver.class);
        intent.setAction(Intent.ACTION_MAIN);
        intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        
        PendingIntent pendingIntent = PendingIntent.getService(context, REQUEST_CODE, intent, REQUEST_CODE);
        int alarmType = AlarmManager.ELAPSED_REALTIME;
        final int FIFTEEN_SEC_MILLIS = 15000;
        
        AlarmManager alarmManager = (AlarmManager)
                getActivity().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS,
                FIFTEEN_SEC_MILLIS, pendingIntent);
        //alarmManager.cancel(pendingIntent);
        Log.i(TAG, "Alarm set!");
    }
Но ошибка на:
Java
1
Intent intent = new Intent(context, AlarmReceiver.class);
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
07.05.2015, 13:14
Intent intent = new Intent(context, AlarmService.class);
0
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 13:20  [ТС]
Всё то-же самое.
NullPointException в той строке.
И BroadcastReceiver не нужен тогда?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void setAlarm(){
        Log.i(TAG, "setAlarm");
                
        Intent intent = new Intent(context, AlarmService.class);
        
        PendingIntent pendingIntent = PendingIntent.getService(context.getApplicationContext(), REQUEST_CODE, intent, REQUEST_CODE);
        int alarmType = AlarmManager.ELAPSED_REALTIME;
        final int FIFTEEN_SEC_MILLIS = 15000;
        
        AlarmManager alarmManager = (AlarmManager)
                getActivity().getSystemService(Context.ALARM_SERVICE);
        alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS,
                FIFTEEN_SEC_MILLIS, pendingIntent);
        //alarmManager.cancel(pendingIntent);
        Log.i(TAG, "Alarm set!");
    }
0
914 / 562 / 88
Регистрация: 13.02.2014
Сообщений: 2,082
07.05.2015, 14:07
Ну так NullPointException если, смотри чей он, видимо context не инициализирован скорее всего.
Цитата Сообщение от edogaafx Посмотреть сообщение
И BroadcastReceiver не нужен тогда?
Он нужен для запуска после перезагрузки, если нужен постоянно работающий сервис.
0
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 14:21  [ТС]
Java
1
Context context;
Инициализирован в начале класса.

Добавлено через 13 минут
Инициализирова Контекст в методе:
Java
1
Context context = getActivity();
Таким-же способов сервисе.
Заработало.
Надеюсь, такой подход будет правилен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2015, 14:21
Помогаю со студенческими работами здесь

AlarmManager.setWindow
Здравствуйте. Сделал alarmManager.setWindow(AlarmManager.RTC, calendar2.getTimeInMillis(), calendar2.getTimeInMillis(), ...

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

AlarmManager описание
Здравствуйте. Подскажите хороший гайд по работе AlarmManager. А то в основном примеры толком не работающие.

AlarmManager и TextView
Здравствуйте. Задача такая: есть AlarmManager и TextView. Как заставить AlarmManager отсчитывать время, заданное пользователем, и...

Обновление приложения и AlarmManager
Доброе утро, уважаемые форумчане! Хочу сделать приложение – будильник. С помощью AlarmManager запускаю приложение в нужное время, все...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru