#android #android-notifications #android-fullscreen
Вопрос:
Я создаю приложение для видеозвонков, и мне нужно отобразить экран входящего вызова. Я использую уведомление, которое отображает действие с полноэкранным механизмом намерения следующим образом:
private fun createIncomingCallNotification(): Notification {
val fullscreenPendingIntent = IncomingCallActivity.intent() // from splitties.intents module
.toPendingActivity(flags =
PendingIntent.FLAG_UPDATE_CURRENT or
Intent.FLAG_ACTIVITY_CLEAR_TASK or
Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_NO_HISTORY or
Intent.FLAG_ACTIVITY_CLEAR_TOP
)
return NotificationCompat.Builder(this, INCOMING_CALL_NOTIFICATION_CHANNEL_ID)
.setSmallIcon(R.drawable.ic_baseline_call_24)
.setContentTitle("Incoming call")
.setContentText("(919) 555-1234")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setCategory(NotificationCompat.CATEGORY_CALL)
.setFullScreenIntent(fullscreenPendingIntent, true)
.setContentIntent(
VideoCallActivity.intent()
.toPendingActivity(flags =
Intent.FLAG_ACTIVITY_CLEAR_TASK or
Intent.FLAG_ACTIVITY_NEW_TASK or
Intent.FLAG_ACTIVITY_NO_HISTORY or
Intent.FLAG_ACTIVITY_NO_HISTORY or
Intent.FLAG_ACTIVITY_CLEAR_TOP
)
)
.setAutoCancel(true)
.setVibrate(DEFAULT_VIBRATE_PATTERN)
.setSound(incomingCallSound)
.build()
}
Он используется в качестве уведомления для службы переднего плана, которое запускается, когда получатель получает запрос на входящий вызов.
Полноэкранное действие и уведомление отображаются нормально. Однако, когда я принимаю вызов, нажав на уведомление, активность в полноэкранном режиме остается в стеке истории (даже с добавлением всех этих флагов плюс autoCancel
). Итак, когда я заканчиваю свой вызов, появляется полноэкранный режим IncomingCallActivity. Он остается даже тогда, когда я останавливаю службу переднего плана, связанную с уведомлением.
Любая помощь будет признательна!
TL;DR:
Я ищу поведение, подобное автоматической отмене, для fullScreenIntent
сопровождающей аннотации. Поскольку система должна решать, отображается ли действие, я хотел бы использовать общий подход для отмены уведомления и закрытия полноэкранного действия при любом выборе действия (отклонить или принять вызов). Я подозреваю , что это следует сделать с помощью a BroadcastReceiver
, но ищу советы о том, как это следует сделать в сжатой форме.
Редактировать:
Мне удалось решить эту BroadcastReceiver
проблему, зарегистрировавшись в полноэкранном режиме с помощью a IntentFilter
. В действии уведомления reject
я просто sendBroadcast
завершаю действие в полноэкранном режиме.
Однако все еще ищу подход «лучших практик» в этом вопросе.