Android 9.0 USER_ROTATION重启后恢复默认值

Android 9.0 USER_ROTATION重启恢复问题分析

摘要:

最近MTK平台 9.0系统中,遇到System签名APK 使用方法“System.putInt(contentResolver, “user_rotation”, rotation);” 调整屏幕方向时,重启后方向总恢复默认方向的问题。

问题原因:

MtkSystemUI 的一个 NavigationBarFragment初始化时,重新设置了user_rotation

调整方向:

    protected void setScreenRotation(int rotation) {
        ContentResolver contentResolver = this.mActivity.getContentResolver();
        try {
            if (System.getInt(contentResolver, "accelerometer_rotation", 0) != 0) {
                System.putInt(contentResolver, "accelerometer_rotation", 0);
            }
        } catch (Exception e) {
        }
        try {
            if (rotation != System.getInt(contentResolver, "user_rotation", 0)) {
                System.putInt(contentResolver, "user_rotation", rotation);
            }
        } catch (Exception e2) {
        }
    }


简陋的思维导图

花时间找到一个修改的方案:
以下是个人最近使用Xmind制作的一个 9.0系统 每次重启user_rotation的值都会重置,问题分析应该重下往上逐步找到问题出现的起始点。
流程图:

在这里插入图片描述

思维导图说明

以下内容是使用xmind 导出思维导图的 md文件,再导入CSDN自动生成

SystemUI

位置:frameworks/base/packages/SystemUI/

NavigationBarFragment.java

onCreate()初始化

NavigationBarFragment 中通过调用 RotationLockController 的函数

setRotationLockedAtAngle 传入参数

  • onCreate

** 接口类:RotationLockController.java**

  • setRotationLockedAtAngle

RotationLockControllerImpl.java

实现RotationLockController接口

实现 setRotationLockedAtAngle

  • setRotationLockedAtAngle

RotationPolicy

位置:frameworks/base/core/java/com/android/internal/view/RotationPolicy.java

  • setRotationLockAtAngle

  • setRotationLock
    此函数通过AsyncTask 调用 WMS 的函数freezeRotation 固定屏幕方向


windowManagerService

位置:
frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

  • freezeRotation
    固定屏幕旋转

PhoneWindowManager

  • setUserRotationMode
    这个函数的主要作用,是把 rotation重新 put到 SettingsProvider中,这时所有的ContentObserver
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值