直播系统代码,强制点开全屏视频时横屏展示
直播系统代码,强制点开全屏视频时横屏展示实现的相关代码
屏幕方向旋转
当系统状态改变,需要重新更新方向时,就会调用
1 | \frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java<br>会执行displayContent.updateRotationUnchecked()<br> @Override<br> public void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout) {<br> updateRotationUnchecked(alwaysSendConfiguration, forceRelayout);<br> }<br> private void updateRotationUnchecked(boolean alwaysSendConfiguration, boolean forceRelayout) {<br> ProtoLog.v(WM_DEBUG_ORIENTATION, "updateRotationUnchecked:" <br> + " alwaysSendConfiguration=%b forceRelayout=%b" ,<br> alwaysSendConfiguration, forceRelayout);<br> Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation" );<br> long origId = Binder.clearCallingIdentity();<br> try {<br> synchronized (mGlobalLock) {<br> boolean layoutNeeded = false;<br> final int displayCount = mRoot.mChildren.size();<br> for (int i = 0; i < displayCount; ++i) {<br> final DisplayContent displayContent = mRoot.mChildren.get(i);<br> Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: display" );<br> final boolean rotationChanged = displayContent.updateRotationUnchecked();<br> Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);<br>\frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java<br> /**<br> * Update rotation of the display.<br> *<br> * @return {@code true} if the rotation has been changed. In this case YOU MUST CALL<br> * {@link #sendNewConfiguration} TO UNFREEZE THE SCREEN.<br> */ <br> boolean updateRotationUnchecked() {<br> return mDisplayRotation.updateRotationUnchecked(false /* forceUpdate */ );<br> } |
强制横屏
1 | \frameworks\base\services\core\java\com\android\server\wm\DisplayRotation.java<br>修改updateRotationUnchecked(),直接返回<br> boolean updateRotationUnchecked(boolean forceUpdate) {<br> if (true){<br> return true;<br> }<br> final int displayId = mDisplayContent.getDisplayId();<br> if (!forceUpdate) {<br> if (mDeferredRotationPauseCount > 0) {<br> // Rotation updates have been paused temporarily. Defer the update until updates<br> // have been resumed.<br> ProtoLog.v(WM_DEBUG_ORIENTATION, "Deferring rotation, rotation is paused.");<br> return false;<br> }<br> <br>\frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java |
修改 getOrientation(),直接返回横屏,无视activity的android:screenOrientation属性
否则可能会出现应用先竖屏再旋转为横屏的现象
1 | <br> /**<br> * In the general case, the orientation is computed from the above app windows first. If none of<br> * the above app windows specify orientation, the orientation is computed from the child window<br> * container, e.g. {@link ActivityRecord#getOrientation(int)}.<br> */ <br> @ScreenOrientation<br> @Override<br> int getOrientation() {<br> if (true){<br> return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;<br> }<br> mLastOrientationSource = null;<br> if (mIgnoreRotationForApps) {<br> return SCREEN_ORIENTATION_USER;<br> } |
以上就是直播系统代码,强制点开全屏视频时横屏展示实现的相关代码, 更多内容欢迎关注之后的文章
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现