Менеджер сигналов тревоги Android с несколькими ожидающими намерениями - PullRequest
0 голосов
/ 20 сентября 2018

Итак, у меня есть такое приложение, где вы можете создавать несколько журналов, и я хочу установить напоминания для каждого журнала.Например, в одном из журналов я установил напоминание, чтобы оно повторялось каждую неделю по вторникам и пятницам, а затем в другом журнале я хочу установить другое напоминание в те же дни, как я могу сделать так, чтобы напоминания не отменяли друг друга?Поскольку я не могу настроить повторение одного диспетчера тревог в разные дни, я устанавливаю несколько диспетчеров тревог для каждого выбранного дня с разными кодами запроса, но затем, если я устанавливаю для других диспетчеров тревог журнала с одинаковыми кодами запроса, они отменяют предыдущие напоминания.Как я мог решить это?(Пользователь может добавить несколько журналов, чтобы разные широковещательные приемники были недоступны)

fun setJournalReminder(context: Context, cls: Class<*>, hour: Int, minute: Int, day: Int){


        val calendar = Calendar.getInstance()
        val setCalendar = Calendar.getInstance().apply {
            timeInMillis = System.currentTimeMillis()
            set(Calendar.HOUR_OF_DAY, hour)
            set(Calendar.MINUTE, minute)
            set(Calendar.SECOND, 0)
        }

        when (day) {
            1 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)
            2 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY)
            3 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY)
            4 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY)
            5 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY)
            6 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY)
            7 -> setCalendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY)
        }

        if (setCalendar.before(calendar))
            setCalendar.add(Calendar.DATE, 1)

        val receiver = ComponentName(context, cls)
        val pm = context.packageManager

        pm.setComponentEnabledSetting(receiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP)

        val intent = Intent(context, cls)
        val pendingIntent = PendingIntent.getBroadcast(context, day, intent, PendingIntent.FLAG_UPDATE_CURRENT)
        val alarmManager = context.getSystemService(ALARM_SERVICE) as AlarmManager

        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, setCalendar.timeInMillis, AlarmManager.INTERVAL_DAY * 7, pendingIntent)

}

1 Ответ

0 голосов
/ 20 сентября 2018

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

Мы могли бы добавить код запроса в действие Intent, чтобы сделать Intent.filterEqualsвсегда ложь ...

...