直播系統程式碼,強制點開全屏視訊時橫屏展示

zhibo系統開發發表於2022-01-12

直播系統程式碼,強制點開全屏視訊時橫屏展示實現的相關程式碼

螢幕方向旋轉

當系統狀態改變,需要重新更新方向時,就會呼叫

\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;
        }


以上就是直播系統程式碼,強制點開全屏視訊時橫屏展示實現的相關程式碼, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2851896/,如需轉載,請註明出處,否則將追究法律責任。

相關文章