Чтобы предотвратить нежелательные действия на дисплее покупателя, вы можете скрыть с него элементы управления и навигации. Тогда клиенты не смогут, например, закрыть приложение отображаемое на дисплее покупателя.
В дополнение к встроенным возможностям Android, мы создали несколько собственых флагов.
В функции для блокирования экрана объявите следующие константы:
private const val SYSTEM_UI_FLAG_IMMERSIVE_HIDDEN = 64
— блокирует возможность открыть панели навигации и статуса в режиме immersive;private const val STATUS_BAR_DISABLE_HOME = 0x00200000
— отключает кнопку Домой;private const val STATUS_BAR_DISABLE_RECENT = 0x01000000
— отключает вызов меню недавних приложений;private const val STATUS_BAR_DISABLE_NOTIFICATION_ALERTS = 0x00040000
— отключает отображение уведомлений;private const val STATUS_BAR_DISABLE_CLOCK = 0x00800000
— отключает отображение часов.private fun enableLock() {
activity?.window?.decorView?.systemUiVisibility = (
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
or View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
or View.SYSTEM_UI_FLAG_IMMERSIVE
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
or SYSTEM_UI_FLAG_IMMERSIVE_HIDDEN
or STATUS_BAR_DISABLE_HOME
or STATUS_BAR_DISABLE_RECENT
or STATUS_BAR_DISABLE_NOTIFICATION_ALERTS
or STATUS_BAR_DISABLE_CLOCK
)
activity?.startLockTask()
}
private fun disableLock() {
activity?.window?.decorView?.systemUiVisibility = 0
activity?.stopLockTask()
}
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/background">
<View
android:id="@+id/invisible_button"
android:layout_width="100dp"
android:layout_height="150dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
// код экрана
</androidx.constraintlayout.widget.ConstraintLayout>
abstract class MultipleOnClickListener(private val clickTimes: Int) : View.OnClickListener {
private var lastTimeClicked: Long = 0
private var clickCount = 0
override fun onClick(v: View?) {
onSingleClick()
if (System.currentTimeMillis() > lastTimeClicked + CLICK_DELAY) {
clickCount = 0
}
lastTimeClicked = System.currentTimeMillis()
clickCount++
if (clickCount == clickTimes) {
onMultipleClick()
clickCount = 0
}
}
open fun onSingleClick() {}
abstract fun onMultipleClick()
companion object {
private const val CLICK_DELAY = 500L
}
}
view.findViewById<View>(R.id.invisible_button)
.setOnClickListener(object : MultipleOnClickListener(clickTimes = 7) {
override fun onMultipleClick() {
disableLock()
onBackPressed()
}
})
В параметре clickTimes
укажите сколько нажатий нужно для активации обработчика. Тут действует строгое правило для всех приложений: для снятия блокировки экрана нужно сделать 7 нажатий в правом верхнем углу экрана.