安卓11菜单实现hdmi-4K动态切换

客户要求系统实现动态hdmi-4K与普通分辨率直接热切换,先在菜单中做个试验,设置中加个切换开关,点击开关就可以直接切到hdmi-4K,这个功能实现后可以通过插拔hdmi那个状态(sys/class/drm/card0-HDMI-A-1/status)直接实现切换,测试代码也很简单,方法如下:

Index: packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java
===================================================================
--- packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java	(revision 907)
+++ packages/apps/Settings/src/com/android/settings/display/HdmiSettings.java	(working copy)
@@ -27,6 +27,7 @@import androidx.preference.SwitchPreference;import androidx.preference.PreferenceCategory;import androidx.preference.PreferenceScreen;
+import androidx.preference.SwitchPreference;import com.android.internal.logging.nano.MetricsProto.MetricsEvent;import com.android.settings.HdmiListPreference;
@@ -39,6 +40,8 @@import java.util.HashMap;import java.util.List;import java.util.Map;
+import android.os.SystemProperties;
+import java.io.*;import static com.android.settings.display.DrmDisplaySetting.DPY_STATUS_CONNECTED;@@ -53,6 +56,7 @@private static final String KEY_PRE_CATE = "Display";private static final String KEY_PRE_RESOLUTION = "Resolution";private static final String KEY_PRE_SCREEN_SCALE = "ScreenScale";
+    private static final String KEY_PRE_HDMI_4K = "HDMIswitch4K";private static final String KEY_AUX_CATEGORY = "aux_category";private static final String KEY_AUX_SCREEN_VH = "aux_screen_vh";private static final String KEY_AUX_SCREEN_VH_LIST = "aux_screen_vhlist";
@@ -87,6 +91,7 @@private PreferenceCategory mAuxCategory;private CheckBoxPreference mAuxScreenVH;private ListPreference mAuxScreenVHList;
+    private SwitchPreference hdmi4kPreference;private Context mContext;private DisplayInfo mSelectDisplayInfo;private DisplayManager mDisplayManager;
@@ -114,6 +119,10 @@if (mDestory && MSG_SWITCH_DEVICE_STATUS != msg.what) {return;}
+			
+			Log.d(TAG, "fan msg.what ="+msg.what);
+			
+			Log.d(TAG, "fan  switch control ="+(ITEM_CONTROL) msg.obj);if (MSG_UPDATE_STATUS == msg.what) {final ITEM_CONTROL control = (ITEM_CONTROL) msg.obj;new Thread() {
@@ -177,6 +186,7 @@if (SWITCH_STATUS_OFF_ON == msg.arg1) {sendSwitchDeviceOffOnMsg(control, SWITCH_STATUS_ON);} else {
+                                    Log.d(TAG, "fan control ="+control);sendUpdateStateMsg(control, 2000);}}
@@ -379,6 +389,7 @@scalePreference.setOnPreferenceClickListener(this);category.addPreference(scalePreference);category.setEnabled(false);
+			DisplayInfo displayInfo = new DisplayInfo();displayInfo.setDisplayNo(display);mDisplayInfoList.put(display, displayInfo);
@@ -394,6 +405,13 @@mAuxScreenVHList.setOnPreferenceChangeListener(this);mAuxScreenVHList.setOnPreferenceClickListener(this);mAuxCategory.removePreference(mAuxScreenVHList);
+	   //add hdmi4kPreference 
+
+ 	   hdmi4kPreference = (SwitchPreference) findPreference(KEY_PRE_HDMI_4K);
+	   hdmi4kPreference.setChecked(SystemProperties.getBoolean("persist.sys.hdmi4k", false));
+	   hdmi4kPreference.setOnPreferenceChangeListener(this);
+
+		}private void sendSwitchDeviceOffOnMsg(ITEM_CONTROL control, int status) {
@@ -583,6 +601,7 @@cate.setEnabled(false);}} else if (key.startsWith(KEY_PRE_RESOLUTION)) {
+			Log.i("fan","key.replace="+key.replace(KEY_PRE_SCREEN_SCALE, ""));for (Map.Entry<Integer, DisplayInfo> entry : mDisplayInfoList.entrySet()) {int display = Integer.parseInt(key.replace(KEY_PRE_RESOLUTION, ""));if (display == entry.getKey()) {
@@ -597,6 +616,23 @@}return true;}
+	 public static	void exe_cmd(String cmd){
+	
+	 Process process2 = null;
+	 DataOutputStream dos = null;
+	 try{
+	 process2 = Runtime.getRuntime().exec("su");
+	 dos = new DataOutputStream(process2.getOutputStream());
+	 dos.writeBytes(cmd);
+	 dos.flush();
+	 dos.close();
+	 }
+	 catch (Exception e) { 
+		 
+			e.printStackTrace(); 
+	}  
+	
+	 }@Overridepublic boolean onPreferenceChange(Preference preference, Object obj) {
@@ -662,6 +698,30 @@//mDisplayManager.forceScheduleTraversalLocked();sendSwitchDeviceOffOnMsg(ITEM_CONTROL.REFRESH_DISPLAY_STATUS_INFO, SWITCH_STATUS_OFF_ON);}
+		
+		else if(preference == hdmi4kPreference){
+ 			 for (Map.Entry<Integer, DisplayInfo> entry : mDisplayInfoList.entrySet()) {
+ 	           // int display = Integer.parseInt(key.replace(KEY_PRE_RESOLUTION, ""));
+ 	            if (0 == entry.getKey()) {
+ 	                mSelectDisplayInfo = entry.getValue();
+ 	            }
+ 	        }
+	          if (obj == Boolean.TRUE) 
+			  {
+				Log.d(TAG, "hdmi 4k is select") ;
+				exe_cmd("setprop persist.vendor.resolution.aux 3840x2160@60");
+			 // exe_cmd("setprop persist.vendor.resolution.aux 1920x1080@60");
+			  exe_cmd("setprop vendor.display.timeline 1");
+			   exe_cmd("setprop persist.sys.hdmi4k true");
+			  }
+	  	  	  else{
+	  
+			 	 Log.d(TAG, "hdmi 4k is close" );
+			   exe_cmd("setprop persist.vendor.resolution.aux 720x480@59.94-736-798-858-489-495-525-a");
+			   exe_cmd("setprop vendor.display.timeline 1");
+			   exe_cmd("setprop persist.sys.hdmi4k false");
+			  }
+			}return true;}

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

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

相关文章

41k+ stars 闪电般快速的开源搜索引擎 docker安装教程

目录 1.下载 2.启动 成功示例 3.创建索引 4.插入数据 4.1下载数据 4.2插入数据 4.3查看数据 5.官方地址 1.下载 docker pull getmeili/meilisearch:latest 2.启动 mkdir -p /opt/meili_datadocker run -it --rm \-p 7700:7700 \-v /opt/meili_data:/meili_data \ge…

YOLOV7剪枝流程

YOLOV7剪枝流程 1、训练 1&#xff09;划分数据集进行训练前的准备&#xff0c;按正常的划分流程即可 2&#xff09;修改train.py文件 第一次处在参数列表里添加剪枝的参数&#xff0c;正常训练时设置为False&#xff0c;剪枝后微调时设置为True parser.add_argument(--pr…

2401d,讨论d串滑动参数

原文 因为对编译时执行的i串的兴趣,我一直在考虑搞个通用用例,而不是相关i串的用例. 滑动模板参数 请考虑以下模板: void pluto(string s)() {pragma(msg, s); } void test() {pluto!"hello"(); }因为s是编译时参数,这编译,而pragma(msg,s) 期望s为编译时值. voi…

Linux第28步_编译“正点原子的TF-A源码”

编译“正点原子的TF-A源码”&#xff0c;目的是想得到TF-A文件&#xff0c;即“tf-a-stm32mp157d-atk-trusted.stm32”。 在前27步的基础上&#xff0c;才可以学习本节内容&#xff0c;学习步骤如下&#xff1a; 1、创建“alientek_tf-a”目录&#xff1b; 2、复制正点原子的…

.【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)

概率图模型是一种用图形表示概率分布和条件依赖关系的数学模型。概率图模型可以分为两大类&#xff1a;有向图模型和无向图模型。有向图模型也叫贝叶斯网络&#xff0c;它用有向无环图表示变量之间的因果关系。无向图模型也叫马尔可夫网络&#xff0c;它用无向图表示变量之间的…

02.部署LVS-DR群集

技能展示&#xff1a; 了解LVS-DR群集的工作原理 会构建LVS-DR负载均衡群集 2.1 LVS-DR 集群 LVS-DR&#xff08; Linux Virtual Server Director Server &#xff09;工作模式&#xff0c;是生产环境中最常用的一种工作模式。 2.1.1&#xff0e;LVS-DR 工作原理 LVS-DR 模式&…

在root账号下启动 elasticsearch

最新版本的 elasticsearch 不能用root账号运行&#xff0c;但是每次启动都要切换到其他账号下面&#xff0c;也是一件很麻烦的事情。下面写个脚本&#xff0c;以指定用户运行elasticsearch 假设服务器已经装好了elasticsearch&#xff0c;并且在 /usr/local/elasticsearch-8.1…

Spark---RDD持久化

文章目录 1.RDD持久化1.1 RDD Cache 缓存1.2 RDD CheckPoint 检查点1.3 缓存和检查点区别 1.RDD持久化 在Spark中&#xff0c;持久化是将RDD存储在内存中&#xff0c;以便在多次计算之间重复使用。这可以显著减少不必要的计算&#xff0c;提高Spark应用程序的性能。 val line…

蓝桥杯练习题(七)

&#x1f4d1;前言 本文主要是【算法】——蓝桥杯练习题&#xff08;七&#xff09;的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是听风与他&#x1f947; ☁️博客首页&#xff1a;CSDN主页听风与他 …

kotlin运行

1.使用android studio 由于我本身是做android的&#xff0c;android studio本身有内置kotlin的插件。但若只是想跑kotlin的程序&#xff0c;并不像和android程序绑在一起&#xff0c;可以创建一个kt文件&#xff0c;在里面写一个main函数&#xff0c;就可以直接运行kotlin程序…

Qt中的多线程

Qt中的多线程 目录 1 为什么需要多线程 2 Qt中使用多线程的一些注意事项 3 QThread类 3.1 QThread类的主要接口 3.2 线程的优先级 4 通过继承QThread类实现多线程 5 从QObject类进行派生实现多线程 5 小结 1 为什么需要多线程 在现代化的程序设计开发中&#xff0c;多进程…

【机器学习 西瓜书】期末复习笔记整理

一些杂点&#xff1a; 测试集如何归一化&#xff1f; —— 不是用测试集的均值和标准差&#xff0c;而是用训练集的&#xff01; 机器学习&#xff1a; 对计算机一部分数据进行学习&#xff0c;然后对另外一些数据进行预测与判断。 参考计算例题&#xff1a; 机器学习【期末复习…

多汗症是否与情绪有关?

多汗症与情绪之间确实存在密切的关系。情绪波动、紧张、焦虑等心理因素是多汗症的常见诱因之一。多汗症患者在情绪激动或紧张时&#xff0c;常常会出现出汗量明显增加的情况。 首先&#xff0c;我们需要了解多汗症的基本病理生理机制。多汗症是由于交感神经过度兴奋引起汗腺过…

Spark-RDD的依赖

RDD的依赖 rdd之间是有依赖关系 窄依赖 每个父RDD的一个Partition最多被子RDD的一个Partition所使用父rdd和子rdd的分区是一对一 mapflatMapfliter 宽依赖 父RDD的Partition会被多个子RDD的Partition所使用父rdd和子rdd的分区是一对多 grouBy()grouByKey()sortBy()sortByKey()…

PyCharm安装使用教程2024

简介 PyCharm是一种PythonIDE&#xff08;Integrated Development Environment&#xff0c;集成开发环境&#xff09;&#xff0c;带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具&#xff0c;比如调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单…

[oeasy]python0004_游乐场_和python一起玩耍_python解释器_数学运算

和python玩耍 &#x1f94a; Python 回忆 上次 了解shell环境中的命令 命令作用whoami显示当前用户名pwd显示当前文件夹ls列出当前文件夹下的内容python3仿佛进入大于号黑洞 这python3 怎么玩啊&#xff01;&#x1f620; 说好的python教程呢&#xff1f;&#x1f914; 运…

vue2使用Lottie

文章目录 学习链接1.安装依赖2.创建lottie组件3.在相对应的页面应用4.相关data.json5.测试效果 学习链接 原文链接&#xff1a;lottie在vue中的使用 lottie官网&#xff1a;https://lottiefiles.com/ 1.安装依赖 npm install lottie-web2.创建lottie组件 <template>…

5G+体育 贵阳电信为亚高原训练基地插上“数字羽翼”

2023年是《5G应用“扬帆”行动计划&#xff08;2021—2023年&#xff09;》的收官之年&#xff0c;5G融合应用正在从点状示范向规模化发展。截至2023年10月底&#xff0c;我国开通5G基站总数达321.5万个&#xff0c;已经建成了全球规模最大、技术领先的5G网络。目前&#xff0c…

MetaGPT前期准备与快速上手

大家好&#xff0c;MetaGPT 是基于大型语言模型&#xff08;LLMs&#xff09;的多智能体协作框架&#xff0c;GitHub star数量已经达到31.3k。 接下来我们聊一下快速上手 这里写目录标题 一、环境搭建1.python 环境2. MetaGpt 下载 二、MetaGPT配置1.调用 ChatGPT API 服务2.简…

Maven的安装和配置

国内Maven仓库之阿里云Aliyun仓库地址及设置 用过Maven的都知道Maven的方便便捷&#xff0c;但由于某些网络原因&#xff0c;访问国外的Maven仓库不便捷&#xff0c;好在阿里云搭建了国内的maven仓库。 需要使用的话&#xff0c;要在maven的settings.xml 文件里配置mirrors的子…