概述
文章目录
- 开发平台基本信息
- 问题描述
- 解决方法
- 去除默认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可动态配置所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复