Как запустить действие из метода onReceive () BroadcastReceiver, когда приложение находится в фоновом режиме? - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу начать действие с метода onReceive() BroadcastReceiver. Это код, который я использую:

class TimeReminderReceiver : BroadcastReceiver() {
     override fun onReceive(p0: Context?, p1: Intent?) {
         println("RECEIVED")

         val i = Intent(p0!!, TimeReminderActivity::class.java)
         i.flags = Intent.FLAG_ACTIVITY_NEW_TASK
         p0.startActivity(i)
     }
}

В стеке потока есть много ответов на этот вопрос, я пробовал все это, и ни один из них не работает для меня. Приложение просто печатает RECEIVED и остается там. Ничто не показывает в logcat, без исключения, ничего. Я также добавил получателя в основной файл.

<receiver
        android:name=".receivers_and_activities.TimeReminderReceiver" />

В чем проблема с этим кодом?

РЕДАКТИРОВАТЬ:

Код, который вызывает трансляция:

val intent = Intent(this@MainActivity, TimeReminderReceiver::class.java)
val pendingIntent = PendingIntent.getBroadcast(this@MainActivity, 0, intent,
                    PendingIntent.FLAG_UPDATE_CURRENT)
val am = this@MainActivity.getSystemService(Context.ALARM_SERVICE) as AlarmManager
am.set(AlarmManager.RTC_WAKEUP, calendar.timeInMillis, pendingIntent)

1 Ответ

1 голос
/ 12 февраля 2020

Как вы прокомментировали, вы пытаетесь запустить Activity, когда ваше приложение находится в Background on Android 10 (уровень API 29) .

From Android (уровень API 29) они накладывают некоторые ограничения на открытие Activity, когда ваше приложение находится в фоновом режиме.

Android 10 (уровень API 29) и более высокие ограничения на места при запуске приложений действия, когда приложение работает в фоновом режиме.

Вы можете найти здесь Ограничения запуска действий из фона .

Они также упоминали, что

Практически во всех случаях приложения, работающие в фоновом режиме, должны отображать чувствительные ко времени уведомления, чтобы предоставлять срочную информацию пользователю, а не непосредственно запускать действие. Примеры использования таких уведомлений включают обработку входящего телефонного звонка или активного будильника.

Поэтому, чтобы преодолеть это поведение, вместо вызова своего приложения, когда оно находится в фоновом режиме, вы должны показать высокоприоритетное уведомление с полноэкранным намерением .

Для получения дополнительной информации о высокоприоритетном уведомлении и полноэкранном намерении вы можете проверить его здесь Время отображения уведомления

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...