Я хочу начать с того, что да, я знаю, что этот вопрос задавался много раз, и есть множество ответов на эти вопросы, но я хочу спросить более опытных разработчиков 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()
.
Мои вопросы:
- Будет ли это устанавливать 2 тревоги, учитывая, что точно такой же pendingIntentиспользуется всякий раз, когда вызывается функция
setReminder()
? Если нет, как я могу это сделать? - Если ответ на первый вопрос положительный, будет ли функция
cancelReminder()
отменять обе тревоги? - Будет ли отправлять еженедельные уведомления пользователю, когдаприложение в фоновом режиме?