MTK-Android12-13 屏幕永不休眠功能实现

MTK-Android12-13 屏幕永不休眠功能实现

文章目录

  • 需求
  • 场景
  • 参考资料
  • 修改文件
    • 简要分析
    • 实现方案
      • 默认休眠时间设置 def_screen_off_timeout
      • 息屏时间添加永不休眠 screen_timeout_entries
      • 更新休眠时间 updateUserActivitySummaryLocked
  • 总结


需求

屏幕永不休眠功能

备注:前面正好讲到过 修改屏幕息屏时间,这里新增一个小的需求,新增屏幕永不休眠选项
在接触的 Android12/13 版本产品,系统默认是没有永不休眠功能的

场景

广告机、商显设备、展示设备 要求屏幕默认常亮或者有永不休眠功能
比如如下在设置选项里面需要有一个永不休眠的选项

在这里插入图片描述

参考资料

MTK-Android12-13 修改默认息屏时间
Android 屏保功能实现
PowerManagerService 进入屏保 updateUserActivitySummaryLocked
PowerManagerService分析-updatePowerStateLocked方法
PowerManagerService之自动灭屏

前面正好涉及到 修改屏幕默认息屏时间、屏保功能定制实现,和当前需求有所关联。 在设置里面更改UI组件、加载 添加的永不休眠功能后,最终是需要再PowerManagerService 里面实现永不休眠功能逻辑的呀。

修改文件

/vendor/mediatek\proprietary/packages/apps/SettingsProvider/res/values/defaults.xml 
/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/arrays.xml
/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values-zh-rCN/arrays.xml
/frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java

简要分析

如上参考资料,特别是之前实现的部分需求 修改息屏默认时间及屏保功能实现,分析如下:

  • defaults.xml 修改默认息屏时间 属性def_screen_off_timeout,可以设置为0 或者 -1
    或者任意你想设置的值 对应永不休眠的值,表示息屏时间默认值。
  • arrays.xml
    修改属性dream_timeout_entries,如修改息屏默认时间分析的内容,系统设置中息屏时间界面加载数据源,那就在这里添加
  • PowerManagerService.java 如屏保功能分析和其它相关资料参考,在更新休眠时间的地方,不让更新即可实现需求

实现方案

默认休眠时间设置 def_screen_off_timeout

这里设置为0 
<integer name="def_screen_off_timeout">0</integer>

息屏时间添加永不休眠 screen_timeout_entries

    <!-- Display settings.  The delay in inactivity before the dream is shown. These are shown in a list dialog. --><string-array name="dream_timeout_entries"><item>Never</item><item>15 seconds</item><item>30 seconds</item><item>1 minute</item><item>2 minutes</item><item>5 minutes</item><item>10 minutes</item><item>30 minutes</item></string-array><string-array name="screen_timeout_entries"><item msgid="8386012403457852396">"15 秒"</item><item msgid="4572123773028439079">"30 秒"</item><item msgid="7016081293774377048">"1 分钟"</item><item msgid="838575533670111144">"2 分钟"</item><item msgid="2693197579676214668">"5 分钟"</item><item msgid="1955784331962974678">"10 分钟"</item><item msgid="5578717731965793584">"30 分钟"</item><item>"永不休眠"</item></string-array>

更新休眠时间 updateUserActivitySummaryLocked

看方法注释,就是用来计算一个系统是否进入dim or bright 的状态

/*** Updates the value of mUserActivitySummary to summarize the user requested* state of the system such as whether the screen should be bright or dim.* Note that user activity is ignored when the system is asleep.** This function must have no other side-effects.*/private void updateUserActivitySummaryLocked(long now, int dirty) {.....}

在这个方法里面,我们来判断当前设置的time 值,来判断是否进行 时间计算就可以了。

  if (mScreenOffTimeoutSetting != 0) {if ((groupUserActivitySummary & USER_ACTIVITY_SCREEN_BRIGHT) != 0&& (mDisplayGroupPowerStateMapper.getWakeLockSummaryLocked(groupId)& WAKE_LOCK_STAY_AWAKE) == 0) {groupNextTimeout = mAttentionDetector.updateUserActivity(groupNextTimeout,screenDimDuration);}hasUserActivitySummary |= groupUserActivitySummary != 0;if (nextTimeout == -1) {nextTimeout = groupNextTimeout;} else if (groupNextTimeout != -1) {nextTimeout = Math.min(nextTimeout, groupNextTimeout);}}else {groupUserActivitySummary |= USER_ACTIVITY_SCREEN_BRIGHT;}mScreenOffTimeoutSetting 是什么,看PowerManagerService 里面变量的声明如下:mScreenOffTimeoutSetting = Settings.System.getIntForUser(resolver,Settings.System.SCREEN_OFF_TIMEOUT, DEFAULT_SCREEN_OFF_TIMEOUT,UserHandle.USER_CURRENT);

总结

  • 这里重点是PMS 在息屏时间上面的一个功能分析
  • 关联到PMS 里面实现的另外一个功能 屏保功能 都是跟息屏相关,部分逻辑业务关联的
  • 对于默认息屏时间,这里属于新增息屏时间选项的一个功能。 如果需要新增其它息屏时间选项,只需要在修改息屏时间源即可 就 不需要修改PMS了。

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

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

相关文章

Lua 中,`math.random` 的详细用法

在 Lua 中&#xff0c;math.random 是用于生成伪随机数的核心函数。以下是其详细用法、注意事项及常见问题的解决方案&#xff1a; Lua 中&#xff0c;math.random 的详细用法—目录 一、基础用法1. 生成随机浮点数&#xff08;0 ≤ x < 1&#xff09;2. 生成指定范围的随机…

HOW - React Error Catch 机制

目录 1. 错误边界&#xff08;Error Boundaries&#xff09;使用场景写法&#xff08;类组件方式&#xff09;&#xff1a;componentDidCatch 2. 事件处理器中的错误3. 异步函数中的错误&#xff08;如 fetch、Promise&#xff09;4. 全局未捕获错误&#xff08;适用于整个 Rea…

1.ElasticSearch-入门基础操作

一、介绍 The Elastic Stack 包含ElasticSearch、Kibana、Beats、LogStash 这就是所说的ELK 能够安全可靠地获取任何来源、任何格式的数据&#xff0c;然后实时地对数据进行搜索、分析和可视化。Elaticsearch,简称为ES&#xff0c;ES是一个开源的高扩展的分布式全文搜索引擎,是…

通过扣子平台将数据写入飞书多维表格

目录 1.1 创建飞书开放平台应用 1.2 创建飞书多维表格 1.3 创建扣子平台插件 1.1 创建飞书开放平台应用 1.1.1 打开地址&#xff1a;飞书开放平台&#xff0c;点击创建应用 注&#xff1a;商店应用需要申请ISV资质&#xff0c;填写企业主体信息&#xff0c;个人的话&#x…

MYSQL数据库语法补充

一&#xff0c;DQL基础查询 DQL&#xff08;Data Query Language&#xff09;数据查询语言&#xff0c;可以单表查询&#xff0c;也可以多表查询 语法&#xff1a; select 查询结果 from 表名 where 条件&#xff1b; 特点&#xff1a; 查询结果可以是&#xff1a;表中的字段…

Redis到底能不能做主数据库?

张三拍案而起&#xff1a;“Redis 是缓存数据库&#xff0c;怎么能当主数据库用&#xff1f;简直是天方夜谭&#xff01;” 李四冷笑回应&#xff1a;“你没用过&#xff0c;凭什么说不行&#xff1f;我已经用 Redis 做主数据库好几年了&#xff0c;系统稳定得像铁板一块&…

flutter 项目结构目录以及pubspec.ymal等文件描述

在Flutter项目中&#xff0c;目录结构和pubspec.yaml文件是非常重要的组成部分&#xff0c;它们定义了项目的结构、依赖管理以及如何构建和运行项目。下面我将详细解释这些关键元素&#xff1a; 1. Flutter项目目录结构 Flutter项目的标准目录结构通常如下所示&#xff1a; …

CentOS 环境下 MySQL 数据库全部备份的操作指南

最近阿里云个人服务到期&#xff0c;因为是很久之前买的测试机器&#xff0c;配置较低&#xff0c;上面运行的有技术博客 和以往的测试项目&#xff0c;所以准备放弃掉。 需要备份下上面的表结构和数据、以及代码仓库。 下面是一个完整的 CentOS 环境下 MySQL 数据库全部备份…

ecplise 工具 没有Java EE Tools 选项

Java EE Tools 是将项目转换为web项目的重要的快捷键&#xff0c;如果进行web开发 那是不可或缺的 该工具是一个插件&#xff0c;可以作为插件安装到ecplise上 安装步骤如下&#xff1a; 找到help-->install new software 在弹出的页面中 work with中输入&#xff1a;Jun…

544 eff.c 1761 优化设计文档

1:性能分析 1.1性能对比 oneapi 与hygonGcc性能对比发现&#xff0c;544课题中的eff.c 1761循环处&#xff0c;oneapi 进行了循环向量化, gcc使用标量&#xff0c;循环源码前加 #pragma clang loop vectorize(disable) 找出oneapi在该循环处关闭和开启loop vect 的性能差距&a…

LeetCode.3396.使数组元素互不相同所需的最少操作次数

3396. 使数组元素互不相同所需的最少操作次数 给你一个整数数组 nums&#xff0c;你需要确保数组中的元素 互不相同 。为此&#xff0c;你可以执行以下操作任意次&#xff1a; 从数组的开头移除 3 个元素。如果数组中元素少于 3 个&#xff0c;则移除所有剩余元素。 注意&…

【已完结STM32】--自学江协科技笔记汇总

以下学习笔记代码均来自b站江协科技视频 笔记汇总完结 文章笔记对应江科大视频新建工程【2-2】新建工程江科大STM32-GPIO输出 点亮LED&#xff0c;LED闪烁&#xff0c;LED流水灯&#xff0c;蜂鸣器&#xff08;学习笔记&#xff09;_unit32-t rcc-apb2periph-CSDN博客 【3-1】…

QML Loader:加载组件与状态监控

目录 引言相关阅读工程结构示例一&#xff1a;从文件加载组件 (LoaderFile.qml)代码实现被加载的组件&#xff1a;MyComponent.qml代码解析运行效果 示例二&#xff1a;直接加载Component对象 (LoaderComponent.qml)代码实现代码解析运行效果 示例三&#xff1a;监控加载状态 (…

K8S核心技术点

Pod&#xff0c;Service和Deployment的关系 Pod&#xff1a;Kubernetes 中最小的部署单元&#xff0c;用于运行容器化应用。 Service&#xff1a;提供服务发现和负载均衡&#xff0c;为 Pod 提供稳定的网络端点&#xff0c;ClusterIP&#xff0c;NodePort&#xff0c;LoadBala…

Spring 核心注解深度解析:@Autowired、@Repository 与它们的协作关系

引言 在 Spring 框架中&#xff0c;​依赖注入&#xff08;DI&#xff09;​​ 是实现松耦合架构的核心机制。Autowired 和 Repository 作为两个高频使用的注解&#xff0c;分别承担着 ​依赖装配​ 和 ​数据访问层标识​ 的关键职责。本文将深入探讨它们的功能特性、协作模式…

[Linux]从零开始的ARM Linux交叉编译与.so文件链接教程

一、前言 最近在项目需要将C版本的opencv集成到原本的代码中从而进行一些简单的图像处理。但是在这其中遇到了一些问题&#xff0c;首先就是原本的opencv我们需要在x86的架构上进行编译然后将其集成到我们的项目中&#xff0c;这里我们到底应该将opencv编译为x86架构的还是编译…

svelte+vite+ts+melt-ui从0到1完整框架搭建

框架太“重”了&#xff1a;通常一个小型项目只由少数几个简单页面构成&#xff0c;如果使用 Vue 或者 React 这些框架来研发的话&#xff0c;有点“大材小用”了。构建的产物中包含了不少框架运行时代码(虚拟 DOM、响应式、状态管理等)&#xff0c;这些代码对于小型项目而言是…

无法看到新安装的 JDK 17

在 Linux 系统中使用 update-alternatives --config java 无法看到新安装的 JDK 17&#xff0c;可能是由于 JDK 未正确注册到系统备选列表中。 一、原因分析 JDK 未注册到 update-alternatives update-alternatives 工具需要手动注册 JDK 路径后才能识别新版本。如果仅安装 JDK…

鼎讯信通 便携式雷达信号干扰模拟器:打造实战化电磁环境的新利器

在现代战争中&#xff0c;电磁环境的复杂性直接影响着雷达装备的性能和作战效果。面对敌方日益精进的电子战手段&#xff0c;如何提升雷达设备的抗干扰能力&#xff0c;确保其在实战环境中的稳定性和可靠性&#xff0c;已成为各国军队和科研机构的重要课题。 为此&#xff0c;…

【AI提示词】决策专家

提示说明 决策专家可以帮助你进行科学决策&#xff0c;尽可能避免错误&#xff0c;提升决策成功的概率。 提示词 # Role : 决策专家决策&#xff0c;是面对不容易判断优劣的几个选项&#xff0c;做出正确的选择。说白了&#xff0c;决策就是拿个主意。决策专家是基于科学决策…