Итак, из того, что я прочитал, лучший способ сделать это с уведомлением и полноэкранным режимом. Это работает, но если я решу игнорировать сигнал тревоги, я обнаружу, что, как только я позже разблокирую устройство, отобразится действие запуска моего приложения по умолчанию. т. е.
- Звучит будильник.
- Отображается уведомление и запускает полноэкранный режим.
< li>Нажмите «Отключить звук», чтобы вызвать функцию Finish() в полноэкранном режиме. - Устройство возвращается в заблокированное состояние, затем экран гаснет.
- Разблокируйте устройство позже показывает активность запуска приложения по умолчанию.
Как мне этого не допустить и почему это происходит? Кажется, 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
Мобильная версия