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.pswp.cn/pingmian/76016.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/76016.shtml
英文地址,請注明出處:http://en.pswp.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;決策就是拿個主意。決策專家是基于科學決策…