【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之类的。

相关推荐
CYRUS_STUDIO3 小时前
Frida 检测与对抗实战:进程、maps、线程、符号全特征清除
android·逆向
csj504 小时前
安卓基础之《(28)—Service组件》
android
lhbian6 小时前
PHP、C++和C语言对比:哪个更适合你?
android·数据库·spring boot·mysql·kafka
catoop7 小时前
Android 最佳实践、分层架构与全流程解析(2025)
android
ZHANG13HAO7 小时前
Android 13 特权应用(Android Studio 开发)调用 AOSP 隐藏 API 完整教程
android·ide·android studio
田梓燊8 小时前
leetcode 142
android·java·leetcode
angerdream8 小时前
Android手把手编写儿童手机远程监控App之JAVA基础
android
菠萝地亚狂想曲9 小时前
Zephyr_01, environment
android·java·javascript
sTone873759 小时前
跨端框架通信机制全解析:从 URL Schema 到 JSI 到 Platform Channel
android·前端
sTone873759 小时前
Java 注解完全指南:从 "这是什么" 到 "自己写一个"
android·前端