【问题标题】:Android alarm manager with multiple pending intents具有多个待处理意图的 Android 警报管理器
【发布时间】:2018-09-20 15:14:46
【问题描述】:

所以我有这样的应用程序,您可以在其中创建多个日记,我想为每个日记设置提醒。例如,在其中一个期刊中,我将提醒设置为每周二和周五重复,然后在另一本期刊中,我想在同一天设置不同的提醒,我该怎么做才能使提醒不会相互取消?因为我无法将一个警报管理器设置为在不同的日子重复,所以我为每个选定的日期设置了多个警报管理器,具有不同的 requestCodes,但是如果我为其他具有相同 requestCodes 的日记警报管理器设置它们会取消以前的提醒。我怎么能解决这个问题? (用户可以添加多个日志,因此不能选择不同的广播接收器)

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)

}

【问题讨论】:

    标签: android kotlin alarmmanager android-pendingintent


    【解决方案1】:

    您将日期用作 requestCode,因此在同一天,待处理的意图将被更新。我认为您应该使用日期和 journalId 的组合来创建您的 RequestCode(请求代码对于日记和日期必须是唯一的)

    我们可以将请求代码添加到 Intent 操作中,以使 Intent.filterEquals 始终为 false...

    【讨论】:

    • 我正在考虑这样的选项,但显然 requestCode 不会使 pendingIntent 与 Api 22 不同
    • 对不起,我不知道这个变化,所以你可以添加一个虚拟的独特动作,让你的意图始终独一无二。
    • SetRepeating 仍然有效吗?我不能让它为我的生活服务吗?
    • @kosas 在任何地方都找不到关于这个 API 22 的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多