2 / 2 / 0
Регистрация: 18.10.2013
Сообщений: 14
1

Метод onReceive в BroadcastReceiver

08.06.2014, 16:38. Показов 1967. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть класс
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
public class Receiver extends BroadcastReceiver {
 
    Alarm nextAlarm;
    Context context;
    MainActivity mainActivity;
 
    Handler handler;
 
    public void setContext(Context context) {
        this.context = context;
        mainActivity = (MainActivity) context;
    }
 
    private void setNextAlarm() {
        cancelAlarm(context);
        nextAlarm = null;
        long minTime = Long.MAX_VALUE;
        for (Alarm alarm: mainActivity.alarms){
            if (alarm.getState() && alarm.getWhenAlarm() < minTime){
                if (alarm.getWhenAlarm() < System.currentTimeMillis())
                    alarm.setWhenAlarm();
                nextAlarm = alarm;
                minTime = alarm.getWhenAlarm();
            }
        }
        if (nextAlarm != null){
            setOnetimeTimer(context);
        }
 
    }
    public void setAlarms() {
        setNextAlarm();
    }
 
    public void setHandler(){
        handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                Log.d("MY_TAG", "Хэндлер сработал");
                if (!nextAlarm.haveDays())
                    mainActivity.alarms.get(mainActivity.alarms.indexOf(nextAlarm)).setState(false);
                mainActivity.remakeList();
                setAlarms();
                SimpleDateFormat sdf = new SimpleDateFormat("EEE\thh:mm");
                AlertDialog.Builder adb = new AlertDialog.Builder(context);
                final MediaPlayer mp = new MediaPlayer();
                adb.setTitle("Сработал будильник");
                adb.setMessage(sdf.format(System.currentTimeMillis()));
                adb.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        mp.stop();
                        dialogInterface.dismiss();
                    }
                });
                try {
                    mp.setDataSource(nextAlarm.getPath());
                    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
                    mp.setLooping(true);
                    mp.prepareAsync();
                    mp.start();
                } catch (IOException ex){
                    Log.d("MY_TAG", "Файл не найден");
                }
                adb.show();
            }
        };
    }
 
    @Override
    public void onReceive(Context context, Intent intent) {
        PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
        PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MY_TAG");
        wl.acquire();
        Log.d("MY_TAG", "Сработал ресивер!");
        if (handler.sendEmptyMessage(0))
            Log.d("MY_TAG", "Отправка сообщения хэндлеру!");
        wl.release();
    }
 
 
    private void setOnetimeTimer(Context context){
        AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, Receiver.class);
        intent.putExtra("MY_ALARM", true);
        long alarmTime= nextAlarm.getWhenAlarm();
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
        am.set(AlarmManager.RTC_WAKEUP, alarmTime, pi);
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm EEE W d");
        Log.d("MY_TAG", "Установлен след.будильник на\t"+sdf.format(nextAlarm.getWhenAlarm()));
    }
 
 
    private void cancelAlarm(Context context)
    {
        Intent intent = new Intent(context, Receiver.class);
        PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0);
        AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        alarmManager.cancel(sender);
    }
 
}
Все поля инициализируются из Activity при помощи методов
receiver.setContext(this);
receiver.setAlarms();
receiver.setHandler();

При обращении к полю класса из onReceive ловлю NullPointerException, что я упускаю?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2014, 16:38
Ответы с готовыми решениями:

Не корректно отрабатывает метод onReceive()
Имеется BroadcastReceiver, который должен отработать, если будет утеряно подключение к WiFi. Как...

Как запустить метод в Activity из BroadcastReceiver
Здравствуйте!!! Все до банальности просто и повторяется, по кругу :) Новичок, увлекся Java &amp;...

Реализация метода а-ля CAsyncSocket::OnReceive()
Всем привет! Сейчас пишу свой класс сокетов, все шло нормально и хорошо, и даже успел сделать и...

BroadcastReceiver
У меня такой вопрос если я создал ресивер и прописал его в манифесте. Мой ресивер прослушивает...

0
08.06.2014, 16:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.06.2014, 16:38
Помогаю со студенческими работами здесь

BroadcastReceiver и startActivity
У меня есть служба и BroadcastReceiver. Когда приходит событие, то я вызываю startService. Если...

Уведомления в BroadcastReceiver
Привет, уважаемые! Прикрутил BroadcastReceiver, мониторю входящие смс, пытаюсь отключить звук...

Виджеты, BroadcastReceiver и Строки
Здравствуйте. Занимаюсь созданием виджета. Делаю что то наподобие нажатия на кнопку. Использую...

Servise, BroadcastReceiver, Activity
Здравствуйте, есть сервис и активити, сервис возвращает данные активити через BroadcastReceiver......


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru