Android Studio AlarmManager.cancel () закрывает приложение - PullRequest
1 голос
/ 27 февраля 2020

Я создаю приложение для будильника, в котором будильник можно установить с помощью кнопки переключения. Код работает в ADV, но если я протестирую его на реальном устройстве, приложение сразу же закрывается после однократного срабатывания будильника и последующего его выключения. Также будильник не выключается.

(нажатие кнопки alarmOn -> будильник включен, нажатие кнопки alarmOff-> приложение закрывается + будильник все еще включен)

mStartBtn1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
                long time;
                if (((ToggleButton) view).isChecked()){ //if button is on
                    Intent intent = new Intent(MainActivity.this, AlarmReceiverActivity.class);
                    PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT);

                    Calendar calendar = Calendar.getInstance();
                    calendar.set(Calendar.HOUR_OF_DAY, timePicker1.getCurrentHour());
                    calendar.set(Calendar.MINUTE, timePicker1.getCurrentMinute());

                    time = (calendar.getTimeInMillis() - (calendar.getTimeInMillis() % 60000));
                    if (System.currentTimeMillis() > time) {
                        if (calendar.AM_PM == 0)
                            time = time + (1000 * 60 * 60 * 12);
                        else
                            time = time + (1000 * 60 * 60 * 24);
                    }
                    am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); //sets the alarm
                }else{ //if button is off
                    am.cancel(pendingIntent);
                }
            }
        });

Спасибо за помощь

Флориан

1 Ответ

0 голосов
/ 27 февраля 2020

Ваше приложение в основном падает. Возможно, потому что вы передаете null в am.cancel(pendingIntent) // pendingIntent может быть здесь пустым.

Попробуйте переместить PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this, 2, intent, PendingIntent.FLAG_CANCEL_CURRENT); за пределы условия if. Если это не так, проверьте AlarmReceiverActivity на наличие сбоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...