Android GMS 开机向导横竖屏切换配置总结
文章目录
- [Android GMS 开机向导横竖屏切换配置总结](#Android GMS 开机向导横竖屏切换配置总结)
-
- 一、前言
- 二、相关分析总结
-
- [1、相关属性 ro.setupwizard.rotation_locked](#1、相关属性 ro.setupwizard.rotation_locked)
- [2、系统设置可旋转属性 Settings system accelerometer_rotation](#2、系统设置可旋转属性 Settings system accelerometer_rotation)
- 3、adb调试旋转功能
- 三、其他
-
- 1、小结
- [2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层)](#2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层))
-
- [(1) `ro.sf.hwrotation` SurfaceFlinger 硬件物理旋转](#(1)
ro.sf.hwrotationSurfaceFlinger 硬件物理旋转) - [(2) `ro.primary_display.user_rotation`](#(2)
ro.primary_display.user_rotation) - [(3) `ro.config.disable_auto_rotate`](#(3)
ro.config.disable_auto_rotate)
- [(1) `ro.sf.hwrotation` SurfaceFlinger 硬件物理旋转](#(1)
- 3、折叠屏扩展属性(Android12+)
- 4、各属性优先级层级(从高到低)
一、前言
Android Google GMS 源码的开机向导 (SetupWizard)应用 默认值不会横竖屏旋转的。
正常设备是没啥影响的,开机后设置可以旋转就可以了;
但是目前开发的是小的旋转屏,要求开机向导也要旋转显示。
并且GMS里面的应用目前Google是不开放的。需要如何解决
研究发现系统默认的旋转属性对Google开机向导应用是没有作用的。
只有修改一个gms关于 SetupWizard 应用的属性就可以设置Google的开机向导也默认可以要旋转。
二、相关分析总结
1、相关属性 ro.setupwizard.rotation_locked
wrelease/vendor$ grep -nr ro.setupwizard.rotation_locked
Binary file partner_gms/apps/SetupWizard/SetupWizard_arm64.apk matches
Binary file partner_gms/apps/SetupWizard/SetupWizard_arm.apk matches
partner_gms/products/gms_base.mk:68: ro.setupwizard.rotation_locked=true \
默认为true ,表示锁定屏幕。
如果需要开机向导应用也横竖屏旋转,就需要把这个属性设置成:false。
同时系统的旋转属性也要设置为可旋转。
2、系统设置可旋转属性 Settings system accelerometer_rotation
console:/ # settings list system | grep rota
accelerometer_rotation=1 //屏幕旋转:1开启,0关闭
user_rotation=0 //屏幕旋转方向值0-3,0横屏
console:/ #
3、adb调试旋转功能
Settings属性设置:
console:/ # settings put system user_rotation 0 //横屏
console:/ # settings put system user_rotation 3 //竖屏
console:/ # settings put system accelerometer_rotation 1 设置屏幕可旋转
console:/ # settings put system accelerometer_rotation 0 设置屏幕锁定,
测试发现accelerometer_rotation 0 设置屏幕锁定,set user_rotation 屏幕才会旋转,这个是比较奇怪的。
wm命令控制屏幕:
# 强制横屏90度
adb shell wm user-rotation lock 0
# 强制反向横屏270度
adb shell wm user-rotation lock 3 //这个值只有0、1、2、3
//获取当前屏幕方向
adb shell wm user-rotation //比如:lock 0
//下面两个命令好像没啥用!
adb shell wm fixed-to-user-rotation enabled
adb shell wm fixed-to-user-rotation disabled
上面这个值是用来调试的,直接操控wm的显示,即使下拉栏显示锁定选择也是会旋转界面。
Google GMS 的开机向导例外,因为它在应用里面有额外判断控制。
三、其他
1、小结
如果需要Google GMS开机向导默认旋转可以设置属性:
ro.setupwizard.rotation_locked=false
并未设置系统默认旋转值:
`ro.config.disable_auto_rotate` false
或者
settings system accelerometer_rotation 1 设置屏幕可旋转
2、编译固化只读 ro 属性(整机默认显示方向,底层硬件 / 显示层)
默认值仅供参考,需要自行验证。
(1) ro.sf.hwrotation SurfaceFlinger 硬件物理旋转
控制屏幕硬件输出层旋转,内核 / LCM 物理屏旋转,所有界面全局生效,优先级最高
-
取值:0 / 90 / 180 / 270
-
场景:屏幕硬件模组本身是横屏,整机默认输出竖屏画面,出厂固化
-
写入 mk:
PRODUCT_PROPERTY_OVERRIDES += ro.sf.hwrotation=90
(2) ro.primary_display.user_rotation
系统开机默认用户锁定方向,初始化user_rotation数据库默认值,设备首次开机生效
# 出厂默认锁定横屏
PRODUCT_PROPERTY_OVERRIDES += ro.primary_display.user_rotation=1
(3) ro.config.disable_auto_rotate
全局禁用整机自动旋转功能,状态栏自动旋转开关直接隐藏,设备永久锁定默认方向
true:整机无自动旋转功能,所有 App 强制固定默认方向false:正常提供自动旋转开关
3、折叠屏扩展属性(Android12+)
Settings.Secure.DEVICE_STATE_ROTATION_LOCK
分折叠 / 展开两种形态保存独立自动旋转开关,多形态设备专用,普通平板手机无需关注
4、各属性优先级层级(从高到低)
仅供参考:
ro.sf.hwrotation硬件物理旋转(底层输出,全局强制)- App 自身 Manifest
screenOrientation(应用内锁定,无视系统设置) ro.setupwizard.rotation_locked(仅针对开机向导独立拦截)- WMS 窗口策略黑名单(Framework 强制指定包名方向)
Settings.System.ACCELEROMETER_ROTATION+USER_ROTATION用户全局旋转开关ro.primary_display.user_rotation开机默认方向