Android GMS 开机向导横竖屏切换配置总结

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.hwrotation SurfaceFlinger 硬件物理旋转)
        • [(2) `ro.primary_display.user_rotation`](#(2) ro.primary_display.user_rotation)
        • [(3) `ro.config.disable_auto_rotate`](#(3) ro.config.disable_auto_rotate)
      • 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、各属性优先级层级(从高到低)

仅供参考:

  1. ro.sf.hwrotation 硬件物理旋转(底层输出,全局强制)
  2. App 自身 Manifest screenOrientation(应用内锁定,无视系统设置)
  3. ro.setupwizard.rotation_locked(仅针对开机向导独立拦截)
  4. WMS 窗口策略黑名单(Framework 强制指定包名方向)
  5. Settings.System.ACCELEROMETER_ROTATION + USER_ROTATION 用户全局旋转开关
  6. ro.primary_display.user_rotation 开机默认方向
相关推荐
apihz1 小时前
PING 接口 PLUS 全球版 —— 免费全球多节点 Ping 检测 API教程
android
阿pin1 小时前
Android随笔-epoll机制
android·epoll
say_fall1 小时前
【Git 精品详解】企业规范:企业级开发模型、Git Flow、发版流程规范、Code Owner 制度、事故应急回滚
大数据·linux·服务器·git·学习·elasticsearch
plainGeekDev1 小时前
Gradle 写法 → Kotlin DSL
android·java·kotlin
kgduu1 小时前
react-redux学习笔记
笔记·学习·react.js
三少爷的鞋2 小时前
协程深度解析:明明只有 8 个异步任务,为何 App 线程数瞬间突破 一倍?
android
诗句藏于尽头2 小时前
Ai-3D音乐播放器-Mineradio -VibeCoding大赏-新增歌词字体自定义上传功能(个人学习)
学习
TE-茶叶蛋3 小时前
Node.js-Phase 1 学习总结:CLI 文件管理系统
学习·node.js
Waay11 小时前
面试口述版:个人对 Prometheus 完整理解
运维·学习·云原生·面试·职场和发展·kubernetes·prometheus