我是靠谱客的博主 任性纸飞机,最近开发中收集的这篇文章主要介绍[高通SDM450][Android9.0]屏幕显示DPI可动态配置,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 开发平台基本信息
    • 问题描述
    • 解决方法
      • 去除默认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中。

最后

以上就是任性纸飞机为你收集整理的[高通SDM450][Android9.0]屏幕显示DPI可动态配置的全部内容,希望文章能够帮你解决[高通SDM450][Android9.0]屏幕显示DPI可动态配置所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(33)

评论列表共有 0 条评论

立即
投稿
返回
顶部