Android AlarmManager и BroadcastReceiver пустые данные о намерениях - PullRequest
0 голосов
/ 12 мая 2018

Я обнаружил, что на 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 на старое.

1 Ответ

0 голосов
/ 02 июля 2018

решено объявить широковещательный приемник таким образом в манифесте

        <receiver android:name=".services.AlarmReceiver"
        android:enabled="true"
        android:exported="false"
        >
        <intent-filter>
            <action android:name="com.blogspot.shudiptotrafder.lifeschedular"/>

            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
    </receiver>

и звонит с тех пор, как я так поступил

val intent = Intent(context, AlarmReceiver::class.java)
        intent.putExtra(ALARM_EXTRA, alarm)
        intent.putExtra("1123","Hola mundo!")
        val pIntent = PendingIntent.getBroadcast(
                context,
                112358,
                intent,
                PendingIntent.FLAG_UPDATE_CURRENT
        )
        Log.e("1123 time seetteedd",nextAlarm.timeInMillis.toString())
        val am = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        am.set(AlarmManager.RTC_WAKEUP, nextAlarm.timeInMillis, pIntent)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...