Почему 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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