Android12强制所有应用跟随gsensor旋转
前言
Android12系统中如果机器带gsensor,竖屏应用如果固定了竖屏,当机器旋转为横屏,竖屏应用是不会转到横屏显示的,还是竖屏显示。抖音这种app就是这样的。因为app里面manifest文件中通过android:screenOrientation固定住了竖屏显示。如果要让横屏的时候app也能够横屏显示,这个时候就需要修改系统,将app的属性拦截掉。
通过了解旋转的流程,可以知道,处理app旋转的地方位于frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java中的rotationForOrientation()函数里面,我们在这个函数进行拦截即可。rotationForOrientation函数第一个参数orientation,就是app的属性值了,我们把这个属性值强制改成所有方向跟随重力感应方向显示。
具体修改方法如下:
--- a/frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/DisplayRotation.java
@@ -1176,7 +1176,7 @@ public class DisplayRotation {
Surface.rotationToString(mUserRotation), mUserRotation,
mUserRotationMode == WindowManagerPolicy.USER_ROTATION_LOCKED