Начиная с Android версии 10 (SDK версии 29), другие ответы больше не будут работать, если приложение работает в фоновом режиме, например, в файле BroadcastReceiver
.
Чтобы заставить его работать на Android 10 и более поздних версиях, вы должны использовать полноэкранное намерение, если вам действительно нужно запустить действие из фона [источник]:
Android 10 (уровень API 29) и более поздние версии накладывают ограничения на то, когда приложения могут запускать действия, когда приложение работает в фоновом режиме. Эти ограничения помогают свести к минимуму прерывания для пользователя и предоставить пользователю больший контроль над тем, что отображается на его экране.
Практически во всех случаях приложения, работающие в фоновом режиме, должны отображать срочные уведомления, чтобы предоставить пользователю срочную информацию, а не запускать действие напрямую. Примеры использования таких уведомлений включают обработку входящего телефонного звонка или активного будильника.
Этого можно добиться следующим образом [источник]:
val fullScreenIntent = Intent(this, CallActivity::class.java)
val fullScreenPendingIntent = PendingIntent.getActivity(this, 0,
fullScreenIntent, PendingIntent.FLAG_UPDATE_CURRENT)
val notificationBuilder =
NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("Incoming call")
.setContentText("(919) 555-1234")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
// Use a full-screen intent only for the highest-priority alerts where you
// have an associated activity that you would like to launch after the user
// interacts with the notification. Also, if your app targets Android 10
// or higher, you need to request the USE_FULL_SCREEN_INTENT permission in
// order for the platform to invoke this notification.
.setFullScreenIntent(fullScreenPendingIntent, true)
val incomingCallNotification = notificationBuilder.build()
Части этого ответа воспроизведены из работы, созданной и поделиться проектом Android с открытым исходным кодом и используется в соответствии с условиями, описанными в Creative Commons 2.5 Attribution License.
person
notquiteamonad
schedule
04.05.2020