前言
由于平板项目没有 Gsensor,需要将所有第三方APP强制横屏, 无视 android:screenOrientation=“portrait” 属性
效果图
修改前
修改后
修改源码
alps\frameworks\base\services\core\java\com\android\server\wm\DisplayRotation.java
@Surface.Rotation - private int mRotation; + private int mRotation = 3; @Override boolean updateRotationUnchecked(boolean forceUpdate) { //add + if (true) { + return true; + }//end final int displayId = mDisplayContent.getDisplayId(); if (!forceUpdate) { if (mDeferredRotationPauseCount > 0) { // Rotation updates have been paused temporarily. Defer the update until updates // have been resumed. ProtoLog.v(WM_DEBUG_ORIENTATION, "Deferring rotation, rotation is paused."); return false; }
alps\frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java
@ScreenOrientation @Override int getOrientation() { //add + if (true) { + return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; + }//end mLastOrientationSource = null; if (mIgnoreRotationForApps) { return SCREEN_ORIENTATION_USER; } if (mWmService.mDisplayFrozen) { if (mWmService.mPolicy.isKeyguardLocked()) { // Use the last orientation the while the display is frozen with the keyguard // locked. This could be the keyguard forced orientation or from a SHOW_WHEN_LOCKED // window. We don't want to check the show when locked window directly though as // things aren't stable while the display is frozen, for example the window could be // momentarily unavailable due to activity relaunch. ProtoLog.v(WM_DEBUG_ORIENTATION, "Display id=%d is frozen while keyguard locked, return %d", mDisplayId, getLastOrientation()); return getLastOrientation(); } } final int rootOrientation = mRootDisplayArea.getOrientation(); mLastOrientationSource = mRootDisplayArea.getLastOrientationSource(); return rootOrientation; }

