[高通SDM450][Android9.0]屏幕显示DPI可动态配置

开发平台基本信息

芯片: 高通SDM450
版本: Android 9.0
kernel: msm-4.9

问题描述

正常我们要修改屏幕的DPI,最简单的方法就是在编译的mk里面,给ro.sf.lcd_density这个属性赋值自己想设置的DPI。但是,我们有一款机器作为微信人脸支付硬件厂商,需要对接各个软件厂商,而不同的客户软件可能需要定制不同的DPI,因为ro属性不允许重写,那意味着即使不同厂商定制仅有dpi差别,也得分不同的固件,这样维护起来会特别麻烦;所以,就需要可以通过广播或者其他途径设置,使得dpi可动态设置。

解决方法

去除默认dpi限制

控制屏幕dpi的实际上有两个属性,ro.sf.lcd_density跟vendor.display.lcd_density。假如编译设置了ro.sf.lcd_density,那么就无法再改变屏幕的dpi,所以,要动态设置的前提是必须保证没有默认设置ro.sf.lcd_density。然后就是vendor.display.lcd_density,从代码可以看出,这个值设置了也是没有的,因为,每次开机的时候都会重新设置,默认设置的值是与硬件屏幕宽度相关。所以,要去掉这个设定,如果设置了自定义的dpi,则不重新设置vendor.display.lcd_density。

--- a/device/qcom/common/rootdir/etc/init.qcom.early_boot.sh
+++ b/device/qcom/common/rootdir/etc/init.qcom.early_boot.sh
@@ -68,24 +68,36 @@ else
     log -t DRM_BOOT -p w "file: '$vbfile' or perms doesn't exist"
 fi
 
+tplcddensity=`getprop persist.custom.lcd_density`
+
 function set_density_by_fb() {
     #put default density based on width
-    if [ -z $fb_width ]; then
-        setprop vendor.display.lcd_density 320
-    else
-        if [ $fb_width -ge 1600 ]; then
-           setprop vendor.display.lcd_density 640
-        elif [ $fb_width -ge 1440 ]; then
-           setprop vendor.display.lcd_density 560
-        elif [ $fb_width -ge 1080 ]; then
-           setprop vendor.display.lcd_density 480
-        elif [ $fb_width -ge 720 ]; then
-           setprop vendor.display.lcd_density 320 #for 720X1280 resolution
-        elif [ $fb_width -ge 480 ]; then
-            setprop vendor.display.lcd_density 240 #for 480X854 QRD resolution
+       echo $tplcddensity | grep -q '[^0-9]'
+    n1=$?
+    
+    echo $tplcddensity
+    if [ -z $tplcddensity ]; then          
+        if [ -z $fb_width ]; then
+            setprop vendor.display.lcd_density 320
         else
-            setprop vendor.display.lcd_density 160
+            if [ $fb_width -ge 1600 ]; then
+               setprop vendor.display.lcd_density 640
+            elif [ $fb_width -ge 1440 ]; then
+               setprop vendor.display.lcd_density 560
+            elif [ $fb_width -ge 1080 ]; then
+               setprop vendor.display.lcd_density 480
+            elif [ $fb_width -ge 720 ]; then
+               setprop vendor.display.lcd_density 320 #for 720X1280 resolution
+            elif [ $fb_width -ge 480 ]; then
+                setprop vendor.display.lcd_density 240 #for 480X854 QRD resolution
+            else
+                setprop vendor.display.lcd_density 240
+            fi
         fi
+    elif [ $n1 -eq 1 ];then
+        setprop vendor.display.lcd_density $tplcddensity
+    else
+        setprop vendor.display.lcd_density 240
     fi
 }

注:可以通过adb设置persist.custom.lcd_density属性,然后重启设备设备在启动的时候会执行sh脚本,然后就设置的值写入到vendor.display.lcd_density中。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值