Я обнаружил, что на Android O что-то не так. Я реализовал функциональность Reminder
.Я хотел отправить трансляцию в назначенное время.AlarmManager работает правильно, BroadcastReceiver выполняет onReceive
, но у намерения нет данных.Я проверил все, и в то время как я настраивал данные тревоги, приложенные к намерениюЯ думаю, что в прошлом это работало хорошо, и что-то случилось за это время.Вот код, который показывает, как я настраиваю Intent
, PendingIntent
и будильник.
Intent(context, AlarmReceiver::class.java).apply {
action = System.currentTimeMillis().toString()
putExtra(AlarmService.ID_KEY, alarmId)
putExtra(AlarmService.CONTENT_TASK, task)
putExtra(AlarmService.CONTENT_ID, task.localId.value)
putExtra(AlarmService.CONTENT_STATUS, task.status)
putExtra(AlarmService.CONTENT_TITLE_KEY, notificationTitle)
putExtra(AlarmService.MESSAGE_KEY, notificationMessage)
}
В ожидании intnet:
private fun createPendingIntent(context: Context, intent: Intent, alarmId: Int): PendingIntent {
return PendingIntent.getBroadcast(context, alarmId, intent, PendingIntent.FLAG_UPDATE_CURRENT)
}
Будильник:
alarmManager.set(AlarmManager.RTC_WAKEUP, AppGlobal.getTimeToMilisecond(task.date) - timeAgo, createPendingIntent(context, intent, alarmId))
Я также пытался запустить Сервис, изменив BroadcastReceiver
на IntentService
и PendingIntent.getBroadcast
на PendingIntent.getService
-> результат был таким же.onHandleIntent
получал Intent
без данных.И под no data
я имею в виду, что, например, intent.getStringExtra(AlarmService.CONTENT_STATUS)
возвращает ноль.Как я могу решить эту проблему?
РЕДАКТИРОВАТЬ:
Я думал об изменении подхода.Может быть, я должен перейти на JobScheduler
, чтобы избавиться от этой ошибки?Что вы думаете о моей идее?
РЕДАКТИРОВАТЬ 2:
Оказалось, что возникла проблема с сериализацией моего Parcelable
объекта.У меня было Parcelable
подобъектов, у которых были некоторые проблемы с сериализацией.К сожалению, об этом не сообщал Android O. Я выяснил, в чем проблема после переключения с устройства с O
на старое.