Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑

news2025/1/12 12:18:18

该功能在系统设置-显示-拿起设备时唤醒

alps\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\LiftToWakePreferenceController.java


public boolean isAvailable() {
    SensorManager sensors = (SensorManager) mContext.getSystemService(Context.SENSOR_SERVICE);
    return sensors != null && sensors.getDefaultSensor(Sensor.TYPE_WAKE_GESTURE) != null;
}

 通过以上代码可以控制该功能是不是在设置中显示,也可以看出来用到的sensor是Sensor.TYPE_WAKE_GESTURE,当然这个sensor是需要驱动配置好之后,上层才可以正常的控制该功能的开启和关闭。

alps\frameworks\base\core\java\android\hardware\SensorManager.java

public Sensor getDefaultSensor(int type) {
    // TODO: need to be smarter, for now, just return the 1st sensor
    List<Sensor> l = getSensorList(type);
    boolean wakeUpSensor = false;
    // For the following sensor types, return a wake-up sensor. These types are by default
    // defined as wake-up sensors. For the rest of the SDK defined sensor types return a
    // non_wake-up version.
    if (type == Sensor.TYPE_PROXIMITY || type == Sensor.TYPE_SIGNIFICANT_MOTION
            || type == Sensor.TYPE_TILT_DETECTOR || type == Sensor.TYPE_WAKE_GESTURE
            || type == Sensor.TYPE_GLANCE_GESTURE || type == Sensor.TYPE_PICK_UP_GESTURE
            || type == Sensor.TYPE_LOW_LATENCY_OFFBODY_DETECT
            || type == Sensor.TYPE_WRIST_TILT_GESTURE
            || type == Sensor.TYPE_DYNAMIC_SENSOR_META || type == Sensor.TYPE_HINGE_ANGLE) {
        wakeUpSensor = true;
    }
    for (Sensor sensor : l) {
        if (sensor.isWakeUpSensor() == wakeUpSensor) return sensor;
    }
    return null;
}

alps\frameworks\base\services\core\java\com\android\server\policy\WakeGestureListener.java

public abstract void onWakeUp();

public boolean isSupported() {
    synchronized (mLock) {
        return mSensor != null;
    }
}

public void requestWakeUpTrigger() {
    synchronized (mLock) {
        if (mSensor != null && !mTriggerRequested) {
            mTriggerRequested = true;
            mSensorManager.requestTriggerSensor(mListener, mSensor);
        }
    }
}

public void cancelWakeUpTrigger() {
    synchronized (mLock) {
        if (mSensor != null && mTriggerRequested) {
            mTriggerRequested = false;
            mSensorManager.cancelTriggerSensor(mListener, mSensor);
        }
    }
}

alps\frameworks\base\services\core\java\com\android\server\policy\PhoneWindowManager.java

class MyWakeGestureListener extends WakeGestureListener {
    MyWakeGestureListener(Context context, Handler handler) {
        super(context, handler);
    }
    @Override
    public void onWakeUp() {
        synchronized (mLock) {
            if (shouldEnableWakeGestureLp()) {
                performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, false,
                        "Wake Up");
                wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromWakeGesture,
                        PowerManager.WAKE_REASON_GESTURE, "android.policy:GESTURE");
            }
        }
    }
}

关键的方法是onWakeUp(),这个方法就是抬手的动作触发的操作,如果我们要在抬手的时候处理一些事情,那么可以在这个方法里面操作。

@Override
public void onWakeUp() {
    synchronized (mLock) {
        if (shouldEnableWakeGestureLp()) {
            performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY, false,
                    "Wake Up");
            wakeUp(SystemClock.uptimeMillis(), mAllowTheaterModeWakeFromWakeGesture,
                    PowerManager.WAKE_REASON_GESTURE, "android.policy:GESTURE");
        }
        // Add on 2023/4/10 for  start
        if ((SystemProperties.getInt("ro.xxx_support", 0) == 1
                || SystemProperties.getInt("ro.xxx_support", 0) == 1)
                && Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.LIFT_ON, 1) == 1) {
            Log.d("HZH", "PhoneWindowManager MyWakeGestureListener onWakeUp 890: open vicescreen");
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.xxx.xxx", "com.xxx.xxx.XService"));
            intent.putExtra("broadcast_type", 109);
            mContext.startForegroundService(intent);
        }
        // Add  on 2023/4/10 for  end
    }
}

l流程比较简单,主要是给大家提供一个思路,如果有抬手相关的需求的时候,相信是会有帮助的

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

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

相关文章

应用系统集成-企业集成模式(EIP)

应用系统集成-企业集成模式&#xff08;EIP&#xff09; 无论是系统间集成或是系统内部组件之间通讯&#xff0c;消息&#xff08;信息流&#xff09;都是系统设计最重要的因素。EIP将详细的讲述了从消息的角度进行集成设计考虑方方面面&#xff0c;是系统设计重要的参考资料。…

springBoot与Vue共同搭建webSocket环境

欢迎使用Markdown编辑器 你好&#xff01; 这片文章将教会你从后端springCloud到前端VueEleementAdmin如何搭建Websocket 前端 1. 创建websocket的配置文件在utils文件夹下websocket.js // 暴露自定义websocket对象 export const socket {// 后台请求路径url: ,websocketCo…

Python学习--函数传值问题

四、函数传值问题 先看一个例子&#xff1a; # -*- coding: UTF-8 -*- def chagne_number( b ):b 1000b 1 chagne_number(b) print( b )最后输出的结果为&#xff1a; 1先看看运行的结果&#xff1f; 想一下为什么打印的结果是 1 &#xff0c;而不是 1000 &#xff1f; …

凉鞋的 Godot 笔记 204. 语句

204. 语句 在上一篇&#xff0c;我们接触了三种常见的类型&#xff0c;如下所示&#xff1a; 这样我们算是对变量进行了一个入门了。 其实我们除了变量&#xff0c;我们还接触了一个叫做语句的概念。 我们可以看下代码: extends Node# Called when the node enters the sce…

Kubernetes原生微服务开发实践

&#x1f482; 个人网站:【工具大全】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 引言 随着互联网业务的…

差值结构顺序的稳定性

3( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 4( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 5( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 做3个网络,让网络的输入都只有3个节点&#xff0c; 一个网络的训练集有3张图片&#xff0c;一个网络训练集有4张图片&#xff0c;一个网络的训练集有5张…

1.VS2022+QT

项目需要对倾斜摄影进行解析编辑&#xff0c;所以采用osg平台。 1.VS2022 百度下载安装一个包&#xff0c;然后选择C桌面开发。 2.Qt 在以下网站下载在线安装程序&#xff0c;并通过cmd运行安装程序。然后根据截图配置安装。 qt | 镜像站使用帮助 | 清华大学开源软件镜像站 |…

Comate SaaS版:开发者的梦想工具终于来了

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

适用于 Windows 的 7 个免费网络课程录制软件

随着虚拟工作和在线教学的兴起&#xff0c;屏幕录制工具是必不可少的&#xff0c;也是当今必备的应用程序。在录制在线会议、创建教程和学术课程或与在线团队协作项目时&#xff0c;它们会派上用场。 网络上有丰富的屏幕录制工具&#xff0c;支持各种平台并提供不同的功能。选…

Python和Java有什么区别

Python和Java是两种很流行的编程语言,但它们有以下几个主要区别: 语言类型:Python是一种解释型语言,Java是一种编译型语言。Python源代码被解释执行,Java源代码先被编译为字节码,然后在JVM上运行。语法简洁性:Python的语法更简洁简单,Java的语法相对更复杂。Python专注于代码的…

MySQL驱动包下载

使用java来连接&#xff0c;进入下述网址&#xff1a; MySQL :: Download Connector/J 如果不是java&#xff0c;则进入下述网址 MySQL :: MySQL Community Downloads

uni-app小程序,uview-ui组件样式无法穿透修改的解决办法

1.首先设置以下选项.该选项的作用是让微信小程序允许样式穿透. 在需要改动的文件内加上 options: { styleIsolation: shared } 2.然后再使用vue的样式穿透写法. ::v-deep .类样式{} 或者 /deep/ .类样式{}

算法与数据结构-贪心算法

文章目录 什么是贪心算法贪心算法实战分析1. 分糖果2. 钱币找零3. 区间覆盖4.霍夫曼编码 什么是贪心算法 关于贪心算法&#xff0c;我们先看一个例子。 假设我们有一个可以容纳 100kg 物品的背包&#xff0c;可以装各种物品。我们有以下 5 种豆子&#xff0c;每种豆子的总量和…

client-go 实现一个自动创建ingress资源的controller

需求&#xff1a; 创建的service annotaion中如果包含ingress/http: "true"的时候&#xff0c;会自动将该服务的ingress资源创建出来&#xff0c;当删除掉ingress/http: "true"的时候&#xff0c;自动删除ingress&#xff0c; 同时将service删除掉的时候也…

堆排序(HeapSort)详解

堆排序 一&#xff0c;思考二&#xff0c;算法步骤2.1向上调整建堆2.2关键思路2.3完整代码补充&#xff1a;向下调整建堆 三&#xff0c;总结 一&#xff0c;思考 我们上一篇文章讲到了堆的基本实现&#xff0c;那么堆排序我们就先借助堆的结构来实现。 void HeapSort(HP* hp…

2023年10月份最新香港优才计划申请攻略,附政策、申请流程、续签!

2023年10月份最新香港优才计划申请攻略&#xff0c;附政策、申请流程、续签&#xff01; 2023年10月份香港优才计划利好政策持续推进&#xff0c;越来越多的人咨询香港优才计划申请事宜。现在为大家整理了一份全面的优才申请攻略&#xff0c;如果你计划在今年申请香港优才&…

MySQL基础练习题

数据表介绍 --1.学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别 --2.课程表 Course(CId,Cname,TId) --CId 课程编号,Cname 课程名称,TId 教师编号 --3.教师表 Teacher(TId,Tname) --TId 教师编号,Tname 教师姓名 --4.成绩…

2021年06月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Python编程&#xff08;1~6级&#xff09;全部真题・点这里 一、单选题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 第1题 下列程序运行的结果是&#xff1f; s hello print(sworld)A: sworld B: helloworld C: hello D: world 答案&#xff1a…

数据飞轮拆解车企数据驱动三板斧:数据分析、市场画像、A/B 实验

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 近日&#xff0c;火山引擎数智平台&#xff08;VeDI&#xff09;2023 数据飞轮汽车行业研讨会在上海举办&#xff0c;活动聚焦汽车行业数字化转型痛点&#xff0c;从…

NEWCC:新时代的区块链生态新币私募造势平台

在当今区块链领域&#xff0c;这项技术已经为金融资产注入了全新的生机&#xff0c;同时也为初创企业提供了新的商业模式和融资机会。通过代币的金融属性&#xff0c;企业和项目方得以实现资本的初期积累&#xff0c;同时在区块链空间以更低成本和更高效率进行交易和服务创新。…