屏幕锁,就是锁住屏幕不让用户误触摸,从开发者的角度看就是不响应用户的点击事件。
屏幕锁界面
可以自己创建一个布局文件,或者直接创建一个View(例如ImageView)。
参数LayoutParams
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即可。
mWindowManager.addView(mScreenLockView, mLayoutParams);
缺陷
但是这样之后其实还有个问题,就是手势导航为手势导航的时候(就是不是三按钮导航的时候),它还是能响应。所以还是需要拦截手势导航的点击事件。
解决方法
在packages/apps/Launcher3/quickstep/recents_ui_overrides/src/com/android/quickstep/TouchInteractionService.java
的onInputEvent方法拦截即可
private void onInputEvent(InputEvent ev) {
if (开启了屏幕锁) {
return;
}
......
}
至于为什么是在这拦截,可以看这篇文章:
Android 10 手势导航源码分析_android framework 手势导航源码-CSDN博客
消费者
这里只是对上面那篇文章的一个记录。
其中OverviewInputConsumer是在桌面或者最近任务界面处理事件的消费者;OtherActivityInputConsumer是非桌面情况下出现的事件消费者;OverviewWithoutFocusInputConsumer是在桌面resumed但是没有焦点的时候的事件消费者,例如桌面上有dialog之类的。
原文地址:https://blog.csdn.net/lxjlxj2333/article/details/135946449
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_64619.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!