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

相关推荐
我不会插花弄玉14 分钟前
8. 复合查询【由浅入深-MySQL】
android·数据库·mysql
熊文豪17 分钟前
机器人开发者生态分析:行业分工变化与启元的定位
android·机器人·启元机器人
郑州光合科技余经理1 小时前
同城商城源码:商品库和订单库怎么随包交付
android·java·开发语言·后端·uni-app·php·ai编程
蒸鱼Yuzheng2 小时前
移动游戏功耗与能效归因:帧率、画质、温控和续航如何一起评估
android·性能测试·功耗优化·游戏性能·温控
hai_android3 小时前
Android 设备锁定:Kiosk Mode 实战
android·java·android jetpack
我不会插花弄玉3 小时前
9. 表的内连和外连【由浅入深-MySQL】
android·数据库·mysql
嘟哩DuliDuli3 小时前
剧本节点输入归一化:文本来源、版本与下游引用
android·人工智能·安全·ai·软件工程
high一马平川3 小时前
# SystemUI Dagger2 精读 · 第 2 章 @Inject:1200 处构造注入,和 1 处例外
android·java·kotlin
大熊的瓜地4 小时前
从0开始写android -完结篇
android