NoneSet AlarmClock() вызывает тревогу неоднократно [проблема возникла из-за Spinner]

РЕДАКТИРОВАТЬ для моего решения: я использовал выпадающий список Spinner, чтобы установить время для будильника и забыл, что onSelectItem Метод Spinner постоянно считает себя выбранным, поэтому, помещая сигнал тревоги в этот метод, он постоянно срабатывает. ОП ниже

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

Вот мой материал для инициализации:

alarmMgr = (AlarmManager)MainActivity.this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

alarmInfo = new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), alarmIntent);

и мой AlarmReceiver класс:

import static com.example.umbrellareminder.MainActivity.location_button;

public class AlarmReceiver extends BroadcastReceiver {
    private Context context;

    @RequiresApi(api = Build.VERSION_CODES.O)
    public void onReceive(Context context, Intent intent) {
        this.context = context;
        location_button.performClick();
    }
}

(location_button это то, что я использую для запуска http-запроса и отправки уведомления)

Теперь, чтобы фактически включить сигнализацию, я попробовал оба

alarmMgr.setAlarmClock(alarmInfo,alarmIntent);

а также

alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent);

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

Так есть ли какая-то причина, по которой мне не хватает, почему этот сигнал тревоги постоянно срабатывает?

Редактирование, чтобы добавить дополнительную информацию: у меня есть кнопка, которая используется, чтобы сделать запрос http / получить некоторую информацию для отображения и использования для уведомления. Сам будильник устанавливается в пределах Spinner (раскрывающийся список представляет собой список необязательных времен для будильника), в onItemSelectedListener вот так:

Spinner time_list = findViewById(R.id.time_list);
        time_list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                remind_time = time_list.getSelectedItem().toString();

                int hour = Integer.parseInt(Character.toString(remind_time.charAt(0)));
                int minute = Integer.parseInt(remind_time.substring(2,3));

                Calendar cal = Calendar.getInstance();
                cal.setTimeInMillis(System.currentTimeMillis());
                cal.set(Calendar.HOUR_OF_DAY, 9);
                cal.set(Calendar.MINUTE, 25);
                cal.set(Calendar.SECOND, 45);

                if(cal.getTimeInMillis() <= System.currentTimeMillis()){
                    cal.add(Calendar.DAY_OF_MONTH, 1);
                }

                Log.d("TIME",cal.getTime().toString());
                alarmInfo = new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), alarmIntent);

                //line where I set the alarm
                alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,alarmIntent);
            }

0 ответов

Другие вопросы по тегам