Почему setFullScreenIntent оставляет приложение в открытом состоянии?Android

Форум для тех, кто программирует под Android
Anonymous
Почему setFullScreenIntent оставляет приложение в открытом состоянии?

Сообщение Anonymous »

Я пытаюсь добавить в свое приложение функцию будильника, которая может разбудить устройство и запустить полноэкранное действие поверх экрана блокировки. Кажется, не существует достойных руководств по экрану блокировки, поэтому мне пришлось поэкспериментировать самостоятельно.
Итак, из того, что я прочитал, лучший способ сделать это с уведомлением и полноэкранным режимом. Это работает, но если я решу игнорировать сигнал тревоги, я обнаружу, что, как только я позже разблокирую устройство, отобразится действие запуска моего приложения по умолчанию. т. е.
  • Звучит будильник.
  • Отображается уведомление и запускает полноэкранный режим.
    < li>Нажмите «Отключить звук», чтобы вызвать функцию Finish() в полноэкранном режиме.
  • Устройство возвращается в заблокированное состояние, затем экран гаснет.
  • Разблокируйте устройство позже показывает активность запуска приложения по умолчанию.
Я не могу понять, почему происходит пункт 5, потому что он кажется противоречивым. Иногда активность приложения остается открытой, иногда нет.
Как мне этого не допустить и почему это происходит? Кажется, Finish() на самом деле не завершает действие, а просто приостанавливается, пока устройство остается заблокированным.
Код протестирован в эмуляторе SDK 33.
FullScreenActivity:
fun onClickMute() {

// tried cancelling notification at this point
// but launch activity still open when unlocking device
finish()

}

override fun onAttachedToWindow() {

window?.let {
it.apply {
addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON)
addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
}
}

Alarm BroadcastReceiver: fun showNotification() {

val launchIntent = Intent(ctx, FullScreenActivity::class.java).also {
it.action = "ringing"
}

// adding these flags don't seem to make a difference
launchIntent.apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
}

val pendingIntent = pendingIntent(ctx,launchIntent)
val mainIntent = Intent(ctx,ActivityAlarmDetails::class.java)
val mainIntentPending = pendingIntent(ctx,mainIntent)

val notif = NotificationCompat.Builder(ctx, CHANNEL_ID)
.setSmallIcon(R.drawable.notification_icon)
.setOnlyAlertOnce(true)
.setContentTitle("Alarm")
.setContentText("ring ring ring")
.setFullScreenIntent(pendingIntent,true)
.setContentIntent(mainIntentPending)

NotificationManagerCompat.from(ctx).notify(REMINDER_ID,notif.build())

}


Подробнее здесь: https://stackoverflow.com/questions/786 ... open-state

Вернуться в «Android»