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
### RK3399 Android 10 屏幕旋转问题及解决方案 对于RK3399设备在Android 10系统下的屏幕旋转问题,可以采取多种方法来实现有效的屏幕旋转功能。 #### 修改`build.prop`文件的方法不再适用 在早期版本中,通过修改`build.prop`文件中的`ro.sf.hwrotation=0`属性能够调整屏幕旋转方向。然而,在Android 9.0及以上版本中,这种方法已经失效[^3]。 #### 使用ConfigStore HAL接口 为了适应新的架构变化并实现在Android 10上更改主显示屏的方向,建议采用基于硬件抽象层(HAL)的方式来进行配置。具体来说,可以在`device/rockchip/common/device.mk`文件内找到如下代码片段: ```makefile # ConfigStoreHAL, for HWRotation, set SF_PRIMARY_DISPLAY_ORIENTATION to change it. PRODUCT_PACKAGES += \ android.hardware.configstore@1.1-service ``` 这段代码表明了如何利用`android.hardware.configstore@1.1-service`服务来控制屏幕的初始朝向。因此,如果想要改变默认启动后的屏幕方向,则需确保此服务已正确集成到产品包中,并适当设置相关参数以满足需求。 #### 应用第三方库或官方支持工具 除了上述内置机制外,还可以考虑借助外部资源辅助解决问题。例如,有专门针对Rockchip系列芯片组设计的应用程序和文档资料可供参考。这些材料不仅提供了详细的指导说明,还可能包含了可以直接使用的源码实例或是预编译好的二进制文件,有助于加速开发进度并减少调试时间[^2]。 #### 实现动态屏幕旋转设置 另外值得注意的是,某些情况下用户希望能够实时切换不同的屏幕模式而无需重启设备。此时可借鉴其他平台的成功案例,比如RK3568上的做法是在“设置->显示->高级->屏幕旋转”菜单里加入相应的选项供使用者自行选择所需的旋转角度[^1]。虽然这并非直接适用于RK3399的具体实施细节,但从用户体验的角度出发不失为一种值得探索的方向。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

勤奋的蒙古大汗

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

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

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

打赏作者

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

抵扣说明:

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

余额充值