直播系统代码,强制点开全屏视频时横屏展示

直播系统代码,强制点开全屏视频时横屏展示实现的相关代码

屏幕方向旋转

当系统状态改变,需要重新更新方向时,就会调用

 

\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java
会执行displayContent.updateRotationUnchecked()
    @Override
    public void updateRotation(boolean alwaysSendConfiguration, boolean forceRelayout) {
        updateRotationUnchecked(alwaysSendConfiguration, forceRelayout);
    }
    private void updateRotationUnchecked(boolean alwaysSendConfiguration, boolean forceRelayout) {
        ProtoLog.v(WM_DEBUG_ORIENTATION, "updateRotationUnchecked:"
                        + " alwaysSendConfiguration=%b forceRelayout=%b",
                alwaysSendConfiguration, forceRelayout);
        Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation");
        long origId = Binder.clearCallingIdentity();
        try {
            synchronized (mGlobalLock) {
                boolean layoutNeeded = false;
                final int displayCount = mRoot.mChildren.size();
                for (int i = 0; i < displayCount; ++i) {
                    final DisplayContent displayContent = mRoot.mChildren.get(i);
                    Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "updateRotation: display");
                    final boolean rotationChanged = displayContent.updateRotationUnchecked();
                    Trace.traceEnd(TRACE_TAG_WINDOW_MANAGER);
\frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java
/**
     * Update rotation of the display.
     *
     * @return {@code true} if the rotation has been changed.  In this case YOU MUST CALL
     *         {@link #sendNewConfiguration} TO UNFREEZE THE SCREEN.
     */
    boolean updateRotationUnchecked() {
        return mDisplayRotation.updateRotationUnchecked(false /* forceUpdate */);
    }

 

强制横屏

 

\frameworks\base\services\core\java\com\android\server\wm\DisplayRotation.java
修改updateRotationUnchecked(),直接返回
    boolean updateRotationUnchecked(boolean forceUpdate) {
        if(true){
            return true;
        }
        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;
            }
   
\frameworks\base\services\core\java\com\android\server\wm\DisplayContent.java

 

修改 getOrientation(),直接返回横屏,无视activity的android:screenOrientation属性

否则可能会出现应用先竖屏再旋转为横屏的现象

 


/**
     * In the general case, the orientation is computed from the above app windows first. If none of
     * the above app windows specify orientation, the orientation is computed from the child window
     * container, e.g. {@link ActivityRecord#getOrientation(int)}.
     */
    @ScreenOrientation
    @Override
    int getOrientation() {
        if(true){
            return ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
        }
        mLastOrientationSource = null;
        if (mIgnoreRotationForApps) {
            return SCREEN_ORIENTATION_USER;
        }

 

以上就是直播系统代码,强制点开全屏视频时横屏展示实现的相关代码, 更多内容欢迎关注之后的文章

 

posted @ 2022-01-12 14:28  云豹科技-苏凌霄  阅读(283)  评论(0编辑  收藏  举报