Как зарегистрировать несколько PendingIntents для одного и того же пункта назначения? - PullRequest
0 голосов
/ 07 ноября 2019

Я хочу создать несколько PendingIntents для одного и того же пункта назначения в моем приложении. В моем случае пункт назначения - BroadcastReceiver класс, который отправит уведомление. Полное уведомление является частью содержимого PendingIntent.

Но я обнаружил, что только последний зарегистрирован PendingIntent отправляется на onReceive из BroadcastReceiver. Поскольку я не могу проверить что-либо о PendingIntent, потому что это интерфейс только для записи, но я могу подтвердить, что по крайней мере 5 PendingIntents были созданы с различным содержанием уведомлений. Но только один сделал это на BroadcastReceiver, и это был последний. Это означает, что каждый новый PendingIntent будет перезаписывать данные предыдущего.

Есть ли способ, как зарегистрировать 10 или более PendingIntents с тем же местом назначения, но с другим телом?

Пример создания PendingIntent для уведомления:

data class PendingNotification(val objectUID: Long, val pInt: PendingIntent)
    var pendingIntentList = mutableListOf<PendingNotification>()
    fun createAlarmPendingIntent(a: Activity, nb: NotificationCompat.Builder?, notId: Int,
                                        id: Long): PendingIntent{
        val nInt = Intent(a, AlarmReceiver::class.java)
        nInt.putExtra(AlarmReceiver.NOTIFICATION_ID, notId)
        nInt.putExtra(AlarmReceiver.NOTIFICATION, nb?.build())

        val pInt = PendingIntent.getBroadcast(
            a,
            0,
            nInt,
            PendingIntent.FLAG_UPDATE_CURRENT
        )

        App.log("PendingId - createPendingInt: $notId")
        //save pending intent for future cancelation by id 
        pendingIntentList.add(PendingNotification(id, pInt))
        return pInt
    }

private fun createAlarm(){
        val pInt = app.createAlarmPendingIntent(a, nb, notId, id)
        val cal = Calendar.getInstance()
        cal.time = alarmTime
        app.aManager.set(AlarmManager.RTC_WAKEUP, cal.timeInMillis, pInt)
    }

1 Ответ

0 голосов
/ 12 ноября 2019

Вы должны убедиться, что каждый PendingIntent уникален. Есть несколько способов сделать это: использовать разные requestCode s, использовать разные Intent действия и т. Д. См. мой ответ на этот похожий вопрос для получения более подробной информации.

...