在AOSP的framework中,可以通过修改WindowManagerService的源代码来实现始终横屏显示。
具体代码示例请见以下步骤:
打开WindowManagerService.java文件,查找setRotationLocked方法。
在setRotationLocked方法中新增一个判断逻辑,在横屏状态下强制旋转至横屏状态。
具体代码如下所示:
boolean setRotationLocked(boolean locked, int displayId) { Slog.i(TAG, "setRotationLocked: locked=" + locked + ", displayId=" + displayId + ", this=" + this); synchronized (mGlobalLock) { DisplayContent dc = mRoot.getDisplayContent(displayId); if (dc != null) { if (dc.getDisplayInfo().rotation == Surface.ROTATION_90 || dc.getDisplayInfo().rotation == Surface.ROTATION_270) { //判断当前状态是否是横屏 locked = true; //强制锁定旋转 } dc.getDisplayPolicy().setRotationLockedLocked(locked); } } return true; }
注意:修改源代码需要进行代码评审和测试,建议在开发板上测试并确认无误后再进行实际应用。