高通 Android 12/13冻结屏幕

news2024/11/20 10:45:19

冻结屏幕很多第一次听到以为是Android一种异常现象,实则不然,就是防止用户在做一些非法操作导致问题防止安全漏洞问题。

1、主要通过用户行为比如禁止下拉状态栏和按键以及onTouch事件拦截等,不知道请看这篇文章(Touch事件传递流程、事件分发中的onTouch 和onTouchEvent 有什么区别,又该如何使用?_事件分发中的ontouch和ontouchevent有什么区别,又该如何使用?-CSDN博客

主要修改代码

PhoneWindowManager interceptKeyBeforeDispatching # interceptKeyBeforeQueueinginterceptMotionBeforeQueueingNonInteractive

ViewGroup #onInterceptTouchEvent 

StatusBar # onTouchEvent 

PhoneStatusBarView #  onTouchEvent

2308  freeze Screen           system_process                       E  set freezeScreen Status Success
2024-05-23 11:49:52.744  1331-4710  unfreeze Screen         system_process                       E  set isUnfreezeScreen Status Success=
2024-05-23 11:52:36.634  1331-2308  freeze Screen           system_process                       E  set freezeScreen Status Success

2、实现逻辑比较简单  代码如下图所示 通过系统属性persist.xxx.screen_frozen去控制 

ViewGroup.java

代码路径frameworks/base/core/java/android/view/ViewGroup.java 在onInterceptTouchEvent进行拦截

 public boolean onInterceptTouchEvent(MotionEvent ev) {
		boolean isFreezeScreen = SystemProperties.getBoolean("persist.xxx.screen_frozen", false);
		Log.e("ZM","onInterceptTouchEvent="+isFreezeScreen);
		if(isFreezeScreen == true){
			Log.e("ZM","onInterceptTouchEvent isFreezeScreen="+isFreezeScreen);
			return true;
		}
		if (ev.isFromSource(InputDevice.SOURCE_MOUSE)
                && ev.getAction() == MotionEvent.ACTION_DOWN
                && ev.isButtonPressed(MotionEvent.BUTTON_PRIMARY)
                && isOnScrollbarThumb(ev.getX(), ev.getY())) {
            return true;
        }
        return false;
    }

3、/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java

 # onTouchEvent设置为true表示拦截此事件 不再往下传递。

 

 @Override
    public boolean onTouchEvent(MotionEvent event) {
		boolean isFreezeScreen = SystemProperties.getBoolean("persist.xxx.screen_frozen", false);
		Log.e("ZM","PhoneStatusBarView="+isFreezeScreen);
		if(isFreezeScreen == true){
			Log.e("ZM","onTouchEvent PhoneStatusBarView isFreezeScreen="+isFreezeScreen);
			return true;
		}
        if (mTouchEventHandler == null) {
            Log.w(
                    TAG,
                    String.format(
                            "onTouch: No touch handler provided; eating gesture at (%d,%d)",
                            (int) event.getX(),
                            (int) event.getY()
                    )
            );
            return true;
        }
        return mTouchEventHandler.handleTouchEvent(event);
    }

4、PhoneWindowManager里面拦截 按键KeyUp/KeyDown事件代码 

+         // 添加一个标志来控制是否启用锁定
+   // private boolean isScreenLocked = true;
+       //zm fix
+       private static final String SYS_PROP_SCREEN_FROZEN = "persist.xxx.screen_frozen";
+       
+       private boolean mScreenFrozen = false;
 
     /**
      * Keyguard stuff
@@ -2664,8 +2670,20 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     @Override
     public long interceptKeyBeforeDispatching(IBinder focusedToken, KeyEvent event,
             int policyFlags) {
+               mScreenFrozen = SystemProperties.getBoolean(SYS_PROP_SCREEN_FROZEN, false);
         final boolean keyguardOn = keyguardOn();
         final int keyCode = event.getKeyCode();
+               Log.e("ZM", "interceptKeyBeforeDispatching Block Home key2 mScreenFrozen="+mScreenFrozen);
+               if (mScreenFrozen) {
+                // 禁止所有按键输入
+                           Log.e("ZM", "free Screen interceptKeyBeforeDispatching Block Home key"+event.toString());
+               if (keyCode == KeyEvent.KEYCODE_BACK ||
+            keyCode == KeyEvent.KEYCODE_APP_SWITCH || keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME
+                keyCode == KeyEvent.KEYCODE_POWER || keyCode == KeyEvent.KEYCODE_HOME) {
+                               Log.e("ZM", "free Screen interceptKeyBeforeDispatching Block Home key2===="+event.toString());
+                return -1; // Prevent the key event from being dispatched
+            }
+        }
         final int repeatCount = event.getRepeatCount();
         final int metaState = event.getMetaState();
         final int flags = event.getFlags();
@@ -3504,6 +3522,18 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     /** {@inheritDoc} */
     @Override
     public int interceptKeyBeforeQueueing(KeyEvent event, int policyFlags) {
+               mScreenFrozen = SystemProperties.getBoolean(SYS_PROP_SCREEN_FROZEN, false);
+               Log.e("ZM", "free Screen interceptKeyBeforeQueueing KeyEvent="+mScreenFrozen);
+               if (mScreenFrozen) {
+            // 禁止所有按键输入
+                       int keyCode = event.getKeyCode();
+                       if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
+                keyCode == KeyEvent.KEYCODE_POWER || keyCode == KeyEvent.KEYCODE_HOME) {
+                               Log.e("ZM", "free Screen interceptKeyBeforeQueueing KeyEvent="+event.toString());
+                return 0;
+            }
+                       Log.e("ZM", "free Screen interceptKeyBeforeQueueing KeyEvent2="+event.toString());
+        }
         final int keyCode = event.getKeyCode();
         final boolean down = event.getAction() == KeyEvent.ACTION_DOWN;
         boolean isWakeKey = (policyFlags & WindowManagerPolicy.FLAG_WAKE) != 0
@@ -4092,6 +4122,11 @@ public class PhoneWindowManager implements WindowManagerPolicy {
     @Override
     public int interceptMotionBeforeQueueingNonInteractive(int displayId, long whenNanos,
             int policyFlags) {
+                     if (mScreenFrozen) {
+                                 //zm fix
+                             Log.e("ZM","interceptMotionBeforeQueueingNonInteractive=====");
+                  return 0;
+              }

5、apk调用代码也比较简单示例如下

/**
     * 冻结屏幕
     */
    public void freezeScreen() {
		SystemProperties.set("persist.xxx.screen_frozen", "true");
		Log.e("freeze Screen", "set freezeScreen Status Success");
    }

    /**
     * 屏幕是否冻结
     *
     * @return
     */
    public boolean isFreezeScreen() {
		// 获取系统属性 persist.xxx.screen_frozen 的值
        String value = SystemProperties.get("persist.sys.screen_frozen", "false");
		Log.e("isFreezeScreen","value="+value);
        // 将属性值转换为布尔值
        return Boolean.parseBoolean(value);
    }

    /**
     * 解冻屏幕
     */
    public void unfreezeScreen() {
        SystemProperties.set("persist.xxx.screen_frozen", "false");
		Log.e("unfreeze Screen", "set isUnfreezeScreen Status Success=");
	}

最后别忘记记得把屏幕保持常亮哈,转载请注明出现高通 Android 12/13冻结屏幕-CSDN博客,谢谢!

最后补充:

// 设置屏幕常亮
       

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

记得加系统签名哈

 android:sharedUserId="android.uid.system"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1686944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

html+css绘制自定义样式输入框

效果&#xff1a; 代码&#xff1a; html部分&#xff1a; <div class"box"> <div class"newbox"><input type"text" required><div class"name">Username</div></div> </div>css部分 …

aardio - godking.vlistEx虚表点击表头全选、排序

新版虚表内置了名称为 DefaultCheckedImg 和 DefaultUnCheckedImg 的两张图片&#xff0c;分别为 【选择框勾选状态默认图片】 和 【选择框未勾选状态默认图片】 以下代码调用了这两张图片&#xff0c;所以请将虚表库升级为最新版。 如果使用旧版库&#xff0c;可以自行添加这…

数据结构面试例题:括号匹配、栈实现队列、队列实现栈,循坏队列(C语言解决)

hello,这次我来用C语言和栈和队列相关问题&#xff0c;希望大家多多支持 括号匹配题目&#xff1a; OJ题目 首先我们不能用数量匹配来进行解答&#xff0c;因为你顺序不一定匹配 解析&#xff1a; 1、左括号入栈 2、右括号出栈顶左括号匹配 1.我们只需要找到右括号&#xff0c…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示&#xff0c;PHP 的流行度降至了历史最低&#xff0c;排在第 17 名&#xff0c;同时&#xff0c;在年度 Stack Overflow 开发者调查报告中&#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

每日5题Day9 - LeetCode 41 - 45

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 今天这道题没有ac&#xff0c;写不动了&#xff0c;下次再通过吧&#xff0c;先给个半成品下次回…

装备制造项目管理软件:奥博思PowerProject项目管理系统

数字化正逐步改变着制造方式和企业组织模式。某制造企业领导层透露&#xff0c;在采用数字化项目管理模式后&#xff0c;企业的发展韧性更加强劲&#xff0c;构筑起了竞争新优势&#xff0c;企业产品研制周期缩短25%&#xff0c;生产效率提升18%。 随着全球经济的发展&#xf…

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识&#xff0c;在日常开发中必不可少&#xff0c;如一些必知必会的常用命令&#xff0c;如环境搭建、应用部署等。同时&#xff0c;也要谨慎使用一些命令&#xff0c;如rm -rf&#xff0c;防止一些生产事故的发生。 3.欢迎点…

521源码-区块链交易所-二开版多语言秒合约交易所系统/区块链交易所系统/完整脚本任务/附带搭建教程

交易只保留秒合约交易&#xff0c;完整的计划执行脚本&#xff0c;秒合约订单完美结算&#xff0c;效果看图片 搭建非常简单&#xff0c;功能不多叙述&#xff0c;自行测试吧 本源码下载地址&#xff1a;二开版多语言秒合约交易所系统/区块链交易所系统/完整脚本任务/附带搭建…

抖音小店没有流量不出单?归根到底,就是转化率不行!

哈喽~我是电商月月 新手做抖音小店&#xff0c;最忧愁的就是&#xff1a;店铺不出单怎么办&#xff1f; 商家通常会把没有销量的原因&#xff0c;都推向于“店铺没有流量” 但在抖音&#xff0c;这个日活量高达9亿的平台来说&#xff0c;任何商铺最不缺的应该就是流量了 但…

如何异地组网添加摄像机?

本文将介绍如何使用天联技术实现异地组网添加摄像机&#xff0c;并保障数据的安全性。 安防摄像机的应用愈发广泛&#xff0c;无论是家庭安防还是企业监控&#xff0c;摄像机都扮演着重要角色。在一些特殊场合或者特殊需求下&#xff0c;我们需要将摄像机添加到异地网络中进行监…

人工智能与区块链技术:开启未来科技的双引擎

在当今科技飞速发展的时代&#xff0c;人工智能和区块链技术如同两颗璀璨的明星&#xff0c;照亮了人类通往未来的道路。 人工智能&#xff0c;以其强大的学习和分析能力&#xff0c;正悄然改变着我们的生活。它能够处理海量的数据&#xff0c;为我们提供精准的预测和个性化的…

若依前端vue实现 输入框下拉选择加搜索用户

探索代码以及详细的注解 <template><div><el-select v-model"selectedUserId" filterable placeholder"选择用户" change"handleChange"><el-optionv-for"user in filteredUsers":key"user.userId":l…

C语言 数组——计算最大值的函数实现

目录 计算最大值 计算最大值的函数实现 应用实例&#xff1a;计算班级最高分​编辑​编辑 返回最大值所在的下标位置 返回最大值下标位置的函数实现​编辑 一个综合应用实例——青歌赛选手评分​编辑​编辑​编辑​编辑​编辑 计算最大值 计算最大值的函数实现 应用实例&…

医学科技查新中对查新点的撰写方法!附案例讲解!

我国的科技查新工作最早是从医学领域开始的&#xff0c;始于1985年中国科学院医学情报所&#xff0c;后来逐步发展到工、农等其 他各个领域。医学科技查新包括立项查新和成果查新两个部分&#xff0c;其中医学立项查新&#xff0c;它是指在医学科研项目申报开题之前&#xff0c…

Vision Mamba代码笔记

1 论文回顾 基本思路 论文解读见&#xff1a; 《VideoMamba》论文笔记_video mamba-CSDN博客 注意 Vision Mamba和VIT的输入和输出的shape的形状是相同的&#xff08;VIT基于Transformer的Encoder设计&#xff0c;输入经过多层MHA和MLP计算&#xff0c;输入和输出的形状相同…

数智赋能内涝治理,四信城市排水防涝解决方案保障城市安全运行

由强降雨、台风造成城市低洼处出现大量积水、内涝的情况时有发生&#xff0c;给人们出行带来了极大不便和安全隐患&#xff0c;甚至危及群众生命财产安全。 为降低内涝造成的损失&#xff0c;一方面我们要大力加强城市排水基础设施的建设&#xff1b;另一方面要全面掌握城市内涝…

有趣的css - 变幻的按钮

大家好&#xff0c;我是 Just&#xff0c;这里是「设计师工作日常」&#xff0c;今天分享的是一个背景不停变幻的按钮&#xff0c;适用在一些比较年轻、青春风格的网站app中&#xff0c;也可在比较多巴胺风、风格强烈的专题页中使用。 最新文章通过公众号「设计师工作日常」发…

Spring Boot 3.x使用knife4j

Spring Boot 3.x使用knife4j 1.添加knife4j依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2.在…

基于Perfetto 解读一帧的生产消费流程 Android >= S Qualcomm

广告 首先帮我朋友打个广告 我们一起在运营一个视频号 感兴趣的可以帮忙点击右边这个小铃铛 铃铛 序 1.这个流程里面的东西如果展开其实是有很多的 内容其实还是比较浅显的 sf处就不贴源码了 关一个Vsync就有的解释 当然笔者在流程上先形成一个思维闭环 2.如有小伙伴需要 笔…

备战电赛 | 集创赛提前练 • 第三周

集创赛提前练 | 第三周 &#xff08;点击下面的题目简介即可进入答题界面哦。&#xff09; 题目一 题目难度&#xff1a;中等 题目二&#xff1a;请设计一个可以实现任意小数分频的时钟分频器&#xff0c;例如&#xff0c;8.7分频的时钟信号 题目难度&#xff1a;简单 题目三…