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);
}