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

相关推荐
COSMOS_*1 小时前
2025最新版 Android Studio安装及组件配置(SDK、JDK、Gradle)
android·ide·jdk·gitee·android studio
jian110581 小时前
android studio Profiler性能优化,查看内存泄漏
android·性能优化·android studio
建群新人小猿3 小时前
陀螺匠企业助手——组织框架图
android·java·大数据·开发语言·容器
TheNextByte14 小时前
如何将文件从Android无线传输到 iPad
android·ios·ipad
赫萝的红苹果4 小时前
实验探究并验证MySQL innoDB中的各种锁机制及作用范围
android·数据库·mysql
叶落无痕525 小时前
Android Studio 2024.3.1 连接夜神模拟器
android·ide·android studio
玲子的猫5 小时前
安卓原生开发实现图片双指放大预览功能
android
2501_915106326 小时前
如何在iPad上高效管理本地文件的完整指南
android·ios·小程序·uni-app·iphone·webview·ipad
似霰6 小时前
AIDL Hal 开发笔记5----实现AIDL HAL
android·framework·hal
2501_915106327 小时前
iOS 成品包加固,在只有 IPA 的情况下,能做那些操作
android·ios·小程序·https·uni-app·iphone·webview