【Android】屏幕锁

屏幕锁,就是锁住屏幕不让用户误触摸,从开发者的角度看就是不响应用户的点击事件。

屏幕锁界面

可以自己创建一个布局文件,或者直接创建一个View(例如ImageView)。

参数LayoutParams

java 复制代码
		mLayoutParams = new LayoutParams();
		mLayoutParams.width = LayoutParams.MATCH_PARENT;
		mLayoutParams.height = LayoutParams.MATCH_PARENT;
		mLayoutParams.type = LayoutParams.TYPE_SYSTEM_ERROR;
		mLayoutParams.flags = 1280;

添加到视图

然后使用WindowManager的addView方法添加到window即可。

java 复制代码
mWindowManager.addView(mScreenLockView, mLayoutParams);

缺陷

但是这样之后其实还有个问题,就是手势导航为手势导航的时候(就是不是三按钮导航的时候),它还是能响应。所以还是需要拦截手势导航的点击事件。

解决方法

在packages/apps/Launcher3/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java

的onInputEvent方法拦截即可

java 复制代码
    private void onInputEvent(InputEvent ev) {
        if (开启了屏幕锁) {
            return;
        }
        ......
    }

至于为什么是在这拦截,可以看这篇文章:

Android 10 手势导航源码分析_android framework 手势导航源码-CSDN博客

消费者

这里只是对上面那篇文章的一个记录。

其中OverviewInputConsumer是在桌面或者最近任务界面处理事件的消费者;OtherActivityInputConsumer是非桌面情况下出现的事件消费者;OverviewWithoutFocusInputConsumer是在桌面resumed但是没有焦点的时候的事件消费者,例如桌面上有dialog之类的。

相关推荐
祖国的好青年12 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴13 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小米渣的逆袭13 小时前
Android ADB 完全使用指南
android·adb
儿歌八万首13 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil14 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙14 小时前
echarts,3d堆叠图
android·3d·echarts
李白的天不白14 小时前
如何项目发布到github上
android·vue.js
summerkissyou198714 小时前
Android-RTC、NTP 和 System Time(系统时间)
android
小书房14 小时前
Kotlin使用体验及理解1
android·开发语言·kotlin
撩得Android一次心动15 小时前
Android Navigation 组件全面讲解
android·jetpack·navigation