RK平台android12 动态调整屏幕方向

文章介绍了在RK平台的Android12系统中,如何在无加速度传感器的情况下动态修改默认开机屏幕方向,通过修改SurfaceFlinger.cpp文件实现。同时,针对数据分区加密导致的开机时无法读取系统属性问题,提出了修改init.mount_all_early.rc和fstab.in文件的解决方案,以允许系统在加密状态下正确读取配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RK平台android12 动态调整屏幕方向

介绍

没有gsensor情况下指定默认系统的开机方向,原生的属性值为ro属性,无法动态进行修改,设定后需要重启生效

一.修改方向属性判断

--- a/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/frameworks/native/services/surfaceflinger/SurfaceFlinger.cpp
@@ -427,7 +427,7 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory) : SurfaceFlinger(factory, SkipI
     }();
 
     useContextPriority = use_context_priority(true);
-
+/*
     using Values = SurfaceFlingerProperties::primary_display_orientation_values;
     switch (primary_display_orientation(Values::ORIENTATION_0)) {
         case Values::ORIENTATION_0:
@@ -442,6 +442,25 @@ SurfaceFlinger::SurfaceFlinger(Factory& factory) : SurfaceFlinger(factory, SkipI
             internalDisplayOrientation = ui::ROTATION_270;
             break;
     }
+*/
+    char value_private[PROPERTY_VALUE_MAX];
+    property_get("persist.surface_flinger.primary_display_orientation", value_private, "0");
+    int temp = atoi(value_private);
+    ALOGD("primary_display_orientation is: %d",temp);
+
+    switch (temp) {
+        case 0:
+            break;
+        case 90:
+            internalDisplayOrientation = ui::ROTATION_90;
+            break;
+        case 180:
+            internalDisplayOrientation = ui::ROTATION_180;
+            break;
+        case 270:
+            internalDisplayOrientation = ui::ROTATION_270;
+            break;
+    }

二.修改data分区加密,导致开机过程中无法读取系统属性

diff --git a/device/rockchip/common/rootdir/init.mount_all_early.rc b/device/rockchip/common/rootdir/init.mount_all_early.rc
index 200d053ebf..6ec6af3d3b 100644
--- a/device/rockchip/common/rootdir/init.mount_all_early.rc
+++ b/device/rockchip/common/rootdir/init.mount_all_early.rc
@@ -4,16 +4,7 @@ on early-fs
     start vold
 
 on fs
-    mount_all /vendor/etc/fstab.${ro.hardware} --early
+    mount_all /vendor/etc/fstab.${ro.hardware}
 
 on late-fs
     # Start services for bootanim
-    start servicemanager
-    start hwcomposer-2-1
-    start gralloc-2-0
-    start surfaceflinger
-    start bootanim
-
-    exec_start wait_for_keymaster
-    # Mount RW partitions which need run fsck
-    mount_all /vendor/etc/fstab.${ro.hardware} --late
diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in
index 2ec6c26565..b8cef766e9 100755
--- a/device/rockchip/common/scripts/fstab_tools/fstab.in
+++ b/device/rockchip/common/scripts/fstab_tools/fstab.in
@@ -23,6 +23,6 @@ ${_block_prefix}odm     /odm      ext4 ro,barrier=1 ${_flags},first_stage_mount
 # For sdmmc
 /devices/platform/${_sdmmc_device}/mmc_host*        auto  auto    defaults        voldmanaged=sdcard1:auto
 #  Full disk encryption has less effect on rk3326, so default to enable this.
-/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065 latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:v2+inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
+/dev/block/by-name/userdata /data f2fs noatime,nosuid,nodev,discard,reserve_root=32768,resgid=1065 latemount,wait,check,keydirectory=/metadata/vold/metadata_encryption,quota,formattable,reservedsize=128M,checkpoint=fs
 # for ext4
 #/dev/block/by-name/userdata    /data      ext4    discard,noatime,nosuid,nodev,noauto_da_alloc,data=ordered,user_xattr,barrier=1    latemount,wait,formattable,check,fileencryption=software,quota,reservedsize=128M,checkpoint=block
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋的蒙古大汗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值