Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
edogaafx
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
#1

AlarmManager + Notification - Android

06.05.2015, 17:06. Просмотров 800. Ответов 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..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
07.05.2015, 08:52     AlarmManager + Notification #2
В манифесте Service и BroadcastReceiver зарегистрированы?
edogaafx
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 10:10  [ТС]     AlarmManager + Notification #3
Сервис был не зарегистрирован.
Но, так и так ничего не происходит. Будельник поставился, судя по логкету. Но и на этом всё.
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
07.05.2015, 12:27     AlarmManager + Notification #4
Ну так в PendingIntent.getActivity вы же не активити ложите, а AlarmReceiver.class.
Значит ложите AlarmService через getService.
edogaafx
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 12:55  [ТС]     AlarmManager + Notification #5
Как понимаю, так:
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);
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
07.05.2015, 13:14     AlarmManager + Notification #6
Intent intent = new Intent(context, AlarmService.class);
edogaafx
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 13:20  [ТС]     AlarmManager + Notification #7
Всё то-же самое.
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!");
    }
Rube
911 / 559 / 88
Регистрация: 13.02.2014
Сообщений: 2,070
07.05.2015, 14:07     AlarmManager + Notification #8
Ну так NullPointException если, смотри чей он, видимо context не инициализирован скорее всего.
Цитата Сообщение от edogaafx Посмотреть сообщение
И BroadcastReceiver не нужен тогда?
Он нужен для запуска после перезагрузки, если нужен постоянно работающий сервис.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2015, 14:21     AlarmManager + Notification
Еще ссылки по теме:

Обновление приложения и AlarmManager Android
Android AlarmManager и TextView
Таймер, AlarmManager и Service на Android Android
Android AlarmManager работает ли? Состояние
Alarmmanager +Service пропуск запусков Android

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

Или воспользуйтесь поиском по форуму:
edogaafx
0 / 0 / 0
Регистрация: 04.03.2014
Сообщений: 42
07.05.2015, 14:21  [ТС]     AlarmManager + Notification #9
Java
1
Context context;
Инициализирован в начале класса.

Добавлено через 13 минут
Инициализирова Контекст в методе:
Java
1
Context context = getActivity();
Таким-же способов сервисе.
Заработало.
Надеюсь, такой подход будет правилен.
Yandex
Объявления
07.05.2015, 14:21     AlarmManager + Notification
Ответ Создать тему
Опции темы

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