Установка и отмена повторяющихся сигналов тревоги в Android - PullRequest
0 голосов
/ 02 ноября 2019

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

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

Я создал класс, который будетобрабатывать установку и отмену аварийных сигналов.

public class ReminderNotification(){
    private Context context;
    private Intent notifyIntent;
    private PendingIntent pendingIntent;
    private AlarmManager alarmManager;

    public ReminderNotification(Context context) {
        this.context = context;
    }

    public void setReminder(int dayOfWeek){
        notifyIntent = new Intent(context, MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);

        Calendar notifTime = Calendar.getInstance();
        if(dayOfWeek == 1){
            notifTime.set(Calendar.DAY_OF_WEEK, 7);
        }else{
            notifTime.set(Calendar.DAY_OF_WEEK, dayOfWeek-1);
        }
        notifTime.set(Calendar.HOUR_OF_DAY, 10);
        notifTime.set(Calendar.MINUTE, 0);
        notifTime.set(Calendar.SECOND, 0);
        notifTime.set(Calendar.MILLISECOND, 0);

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, notifTime.getTimeInMillis(), alarmManager.INTERVAL_DAY*7, pendingIntent);
    }

    public void cancelReminder(){
        notifyIntent = new Intent(context, MyReceiver.class);
        pendingIntent = PendingIntent.getBroadcast(context, 0, notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        alarmManager.cancel(pendingIntent);
        pendingIntent.cancel();
    }
}

Каждый раз, когда пользователь нажимает кнопку входа в систему, он вызывает функцию setReminder(). Но поскольку мне нужно отправить напоминание за день до понедельника и четверга, эта функция будет вызываться дважды при каждом нажатии кнопки входа в систему. И когда пользователь нажимает кнопку «Выйти», будет вызвана функция cancelReminder().

Мои вопросы:

  1. Будет ли это устанавливать 2 тревоги, учитывая, что точно такой же pendingIntentиспользуется всякий раз, когда вызывается функция setReminder()? Если нет, как я могу это сделать?
  2. Если ответ на первый вопрос положительный, будет ли функция cancelReminder() отменять обе тревоги?
  3. Будет ли отправлять еженедельные уведомления пользователю, когдаприложение в фоновом режиме?
...