当前位置: 首页 > news >正文

Android14窗口管理自适应投屏分辨率

环境

console:/ # cat /proc/version
Linux version 6.1.57 (机密信息) (Android (10087095, +pgo, +bolt, +lto, -mlgo, based on r487747c) clang version 17.0.2 (https://android.googlesource.com/toolchain/llvm-project d9f89f4d16663d5012e5c09495f3b30ece3d2362), LLD 17.0.2) #22 SMP PREEMPT Mon Feb 24 09:56:40 UTC 2025
 

auto_wm.c

$ cat auto_wm.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
/*persist.panel.width=800persist.panel.height=480persist.panel.density=178*/
struct panel {int width;int height;int density;
};static int get_remote_panel_info(struct panel *info)
{int ret = -1;FILE *fp = NULL;char buf[64] = {0};if((fp = fopen("/mnt/vendor/qcache/display_config.txt", "r")) != NULL){do{fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.width=%d", &info->width) != 1)break;fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.height=%d", &info->height) != 1)break;fgets(buf, sizeof(buf), fp);if(sscanf(buf, (char *)"persist.panel.density=%d", &info->density) != 1)break;ret = 0;}while(0);fclose(fp);}return ret;
}static int get_local_panel_info(struct panel *info)
{int ret = -1;FILE *fp = NULL;if((fp = popen("wm size", "r")) != NULL){if(fscanf(fp, (char *)"Physical size: %dx%d", &info->width, &info->height) == 2)ret = 0;pclose(fp);}if(ret != -1){if((fp = popen("wm density", "r")) != NULL){if(fscanf(fp, "Physical density: %d", &info->density) != 1)ret = -1;}else{ret = -1;}pclose(fp);}return ret;
}static int get_override_panel_info(struct panel *info)
{int ret = -1;FILE *fp = NULL;char buf[64] = {0};if((fp = popen("wm size", "r")) != NULL){fgets(buf, sizeof(buf), fp);if(fscanf(fp, (char *)"Override size: %dx%d", &info->width, &info->height) == 2)ret = 0;pclose(fp);}if((fp = popen("wm density", "r")) != NULL){fgets(buf, sizeof(buf), fp);if(fscanf(fp, "Override density: %d", &info->density) != 1)ret = -1;}else{ret = -1;}pclose(fp);return ret;
}int main(int argc, char *argv[])
{int ret = -1;struct panel panel_remote = {0};struct panel panel_local = {0};struct panel panel_override = {0};char buf[64] = {0};while(1){ret = get_remote_panel_info(&panel_remote);ret |= get_local_panel_info(&panel_local);get_override_panel_info(&panel_override);printf("remote:%d,%d,%d\n", panel_remote.width, panel_remote.height, panel_remote.density);printf("local:%d,%d,%d\n", panel_local.width, panel_local.height, panel_local.density);printf("override:%d,%d,%d\n", panel_override.width, panel_override.height, panel_override.density);if(ret != 0){sleep(1);continue;}if(((panel_remote.width == panel_local.width) || (panel_remote.width == panel_override.width))&& ((panel_remote.height == panel_local.height) || (panel_remote.height == panel_override.height))&& ((panel_remote.density == panel_local.density) || (panel_remote.density == panel_override.density))){printf("#### ok\n");break;}/*setprop persist.vendor.framebuffer.main 1920x720p30setprop persist.vendor.framebuffer.aux 1920x720p30setprop persist.vendor.resolution.main 1920x720p30setprop persist.vendor.resolution.aux 1920x720p30wm size 1920x720wm density 160*/snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.framebuffer.main %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.framebuffer.aux %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.resolution.main %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"setprop persist.vendor.resolution.aux %dx%dp30", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"wm size %dx%d", panel_remote.width, panel_remote.height);system(buf);snprintf(buf, sizeof(buf), (char *)"wm density %d", panel_remote.density);system(buf);}
}

 

<完> 

 

http://www.lryc.cn/news/543960.html

相关文章:

  • Shot Studio for macOS 发布 1.0.2
  • 《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)
  • Starrocks入门(二)
  • 银河麒麟高级服务器操作系统在线调整/pro/{PID}/limits文件中nofile的软限制和硬限制参数值操作方法
  • html css js网页制作成品——HTML+CSS甜品店网页设计(5页)附源码
  • Open WebUI项目源码学习记录(从0开始基于纯CPU环境部署一个网页Chat服务)
  • 【Python 入门基础】—— 人工智能“超级引擎”,AI界的“瑞士军刀”,
  • 蓝桥杯练习代码
  • Imagination通过最新的D系列GPU IP将效率提升至新高度
  • C高级——shell(3)
  • 【C语言】第八期——指针、二维数组与字符串
  • docker 运行claude 的computer use
  • JAVA面试_进阶部分_23种设计模式总结
  • 边缘计算收益低的三大指标
  • Linux网络之传输层协议(UDP,TCP协议)
  • 傅里叶分析
  • 【前端基础】Day 3 CSS-2
  • NAT 技术:网络中的 “地址魔术师”
  • Ollama下载安装+本地部署DeepSeek+UI可视化+搭建个人知识库——详解!(Windows版本)
  • 【JavaSE-1】初识Java
  • 《基于Django和ElasticSearch的学术论文搜索推荐系统的设计与实现》开题报告
  • Dify在Ubuntu20.04系统的部署
  • 第7天:结构体与联合体 - 复杂数据类型
  • vue富文本 vue-quill-editor + 上传图片到阿里云服务器 + 修改富文本内容
  • Java常见设计模式(中):结构型模式
  • DeepSeek R1 + 飞书机器人实现AI智能助手
  • 【论文详解】Transformer 论文《Attention Is All You Need》能够并行计算的原因
  • 51c嵌入式~电路~合集12
  • php 获取head参数
  • 蓝桥杯嵌入式备赛