实际开发中,有时项目需要设备默认开机横屏,这里我们默认第一帧第二帧依旧采用竖屏资源(Android7.0)。
        frameworks/base/cmds/bootanimation/BootAnimation.cpp
        frameworks/base/core/res/res/values/config.xml
        frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java
        frameworks/native/services/surfaceflinger/DisplayDevice.cpp
修改分为三部分:
        1.上层UI修改
        (1)
        --- frameworks/base/core/res/res/values/config.xml    (revision 139)
        +++ frameworks/base/core/res/res/values/config.xml    (working copy)
@@ -639,7 +639,7 @@
        settings are omitted from the system UI.  In certain situations we may
        still use the accelerometer to determine the orientation, such as when
        docked if the dock is configured to enable the accelerometer. -->
        -    <bool name="config_supportAutoRotation">true</bool>
        +    <bool name="config_supportAutoRotation">false</bool>
 
<!-- If true, the screen can be rotated via the accelerometer in all 4
        rotations as the default behavior. -->
@@ -694,7 +694,7 @@
 
<!-- The number of degrees to rotate the display when the keyboard is open.
        A value of -1 means no change in orientation by default. -->
        -    <integer name="config_lidOpenRotation">-1</integer>
        +    <integer name="config_lidOpenRotation">90</integer>
 
 
        (2)
        --- frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java    (revision 116)
        +++ frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java    (working copy)
        @@ -656,7 +656,7 @@
 
        SparseArray<DisplayContent> mDisplayContents = new SparseArray<>(2);
        -    int mRotation = 0;
        +    int mRotation = Surface.ROTATION_90;
        int mLastOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
        boolean mAltOrientation = false;
 
        @@ -7109,8 +7109,8 @@
 
        final int oldRotation = mRotation;
        /// M: [ALPS00502835] add for tablet IPO power-off/on issue in landscape mode
        -        int rotation = (mIsUpdateIpoRotation || mIsUpdateAlarmBootRotation) ? Surface.ROTATION_0 :
        -            mPolicy.rotationForOrientationLw(mLastOrientation, mRotation);
        +        int rotation = Surface.ROTATION_90;//(mIsUpdateIpoRotation || mIsUpdateAlarmBootRotation) ? Surface.ROTATION_0 :
        +            //mPolicy.rotationForOrientationLw(mLastOrientation, mRotation);
 
        } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
        if (mHasReceiveIPO) {
//                    mRotation = 0;
        mRotation = 1; //M chongqing 20180307
        mPolicy.setRotationLw(mRotation);
        Slog.v(TAG, "Re-initialize the rotation value to " + mRotation);
        mHasReceiveIPO = false;
        }
 
        *******************上面的可以保证开机UI是横屏的 **************************
 
 
        2: 底层(C++)修改开机动画横屏问题
        (3)
        --- frameworks/native/services/surfaceflinger/DisplayDevice.cpp    (revision 116)
        +++ frameworks/native/services/surfaceflinger/DisplayDevice.cpp    (working copy)
        @@ -211,7 +211,7 @@
        }
 
        // initialize the display orientation transform.
        -    setProjection(DisplayState::eOrientationDefault, mViewport, mFrame);
        +    setProjection(DisplayState::eOrientation90, mViewport, mFrame);
 
        (4)
        --- frameworks/base/cmds/bootanimation/BootAnimation.cpp    (revision 116)
        +++ frameworks/base/cmds/bootanimation/BootAnimation.cpp    (working copy)
        @@ -417,11 +417,11 @@
        if (status)
        return -1;
        /// M: The tablet rotation maybe 90/270 degrees, so set the lcm config for tablet
        -    SurfaceComposerClient::setDisplayProjection(dtoken, DisplayState::eOrientationDefault, Rect(dinfo.w, dinfo.h), Rect(dinfo.w, dinfo.h));
        +    SurfaceComposerClient::setDisplayProjection(dtoken, DisplayState::eOrientation90, Rect(dinfo.h, dinfo.w), Rect(dinfo.h, dinfo.w));
 
        // create the native surface
        sp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),
        -            dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);
        +            dinfo.h, dinfo.w, PIXEL_FORMAT_RGB_565);
部分应用在系统强制横屏显示后,还是会以竖屏UI显示,导致应用不能正常使用。

修改路径:frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

private int getAppSpecifiedOrientation() {
        //wc 强制设置第三方App横屏显示
        if(true){
            return ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
        }
        //wc 强制设置第三方App横屏显示
        int lastOrientation = SCREEN_ORIENTATION_UNSPECIFIED;
        boolean findingBehind = false;
        boolean lastFullscreen = false;
        DisplayContent displayContent = getDefaultDisplayContentLocked();
        final ArrayList<Task> tasks = displayContent.getTasks();
        final boolean inMultiWindow = isStackVisibleLocked(DOCKED_STACK_ID)
                || isStackVisibleLocked(FREEFORM_WORKSPACE_STACK_ID);
        final boolean dockMinimized =
                getDefaultDisplayContentLocked().mDividerControllerLocked.isMinimizedDock();
        ......
        // The next app has not been requested to be visible, so we keep the current orientation
        // to prevent freezing/unfreezing the display too early unless we are in multi-window, in
        // which we don't let the app customize the orientation unless it was the home task that
        // is handled above.
        return inMultiWindow ? SCREEN_ORIENTATION_UNSPECIFIED : mLastOrientation;
    }

android系统默认横屏相关推荐

  1. 修改Android系统默认时间

    一 : 修改Android系统默认时间 源码路径:frameworks/base/services/java/com/android/server/SystemServer.java 主要变量EARL ...

  2. Android系统默认语言改为中文

    第一种方法: 修改 build/tools/buildinfo.sh echo "ro.product.locale.language=zh" echo "ro.prod ...

  3. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  4. Android系统默认显示电池电量百分比

    Android系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路: 需求:Android 11 让系统默认显示电池电量百分比 整理一下修该需求时候遇到的问题以及进行修改的思路 ...

  5. Android activity默认横屏设置

    在android app开发中,有些需求要求app 页面默认横屏状态,但是如果在AndroidManifest.xml中设置方向 设置android:screenOrientation="l ...

  6. Android系统默认Home应用程序(Launcher)的启动过程源代码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还需要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  7. Android系统默认Home应用程序(Launcher)的启动过程源码分析

    在前面一篇文章中,我们分析了Android系统在启动时安装应用程序的过程,这些应用程序安装好之后,还须要有一个Home应用程序来负责把它们在桌面上展示出来,在Android系统中,这个默认的Home应 ...

  8. android版本如何修改时间,如何修改Android系统默认时间

    相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期,没错,这就是Android设备的默认日期.当Android设备没有联网,无法获取当前真实时间的时候,就会使用系统默认时间 ...

  9. Android 系统默认参数的修改

    转自: http://www.th7.cn/Program/Android/201505/447097.shtml 写在前面的话 一般在新项目开始之初,我们需要针对客户需求进行各种系统默认属性的配置, ...

最新文章

  1. Windows API实现窗口居中
  2. ADO.NET中的五个主要对象介绍及使用
  3. turtle 20秒画完小猪佩奇“社会人”
  4. mysql教程丿it教程网_MySQL整体
  5. php根据浏览器调用支付_Android通过外部浏览器调用微信H5支付,Android+PHP详解
  6. 嵌入式Linux系统编程学习之二十五信号量
  7. bootstrap 3.0 LESS源代码浅析(一)
  8. 一台显示器分成双屏_华硕显示器贴心相伴:云办公、云学习宅家无忧
  9. Android Studio Access to '/svn/Tech/!svn/act/e53c1e70-3832-884e-8bd6-c46dc31f049a' forbidden问题解决方法
  10. gom引擎没有和账号服务器连接,GOM引擎和GEE引擎的传奇版本配置登录界面黑屏的原因和解决办法...
  11. cocos creator横竖屏适配方案及常用设计尺寸
  12. 量子物理史话 第四章 白云深处
  13. 计算机网络软件组成,计算机网络软件的组成
  14. 【Excel】工作中会用到的excel操作和技巧
  15. iOS--CFMessagePort实现进程间通信
  16. 线性表中的尾插法双链表的学习
  17. fedora dnf 指定安装目录
  18. 搭建开发环境 | 工欲善其事,必先利其器(C、C++、Java、Python)
  19. 2019年数学最高奖揭晓:首位女性阿贝尔奖得主,一个有人情味、卓尔不凡的数学家...
  20. 方差分析-单因素方差分析示例 (Between Subjects)

热门文章

  1. Apache Pulsar的consume的各种subscription mode订阅模式、consume消费者的消费规则
  2. ubuntu 安装 Clang/LLVM 15.0.4
  3. stk 12.5 odtk 7.5
  4. 【读书摘录笔记】计量经济学入门(黄少敏) 第一部分 基本原理
  5. 动态规划法(一)从斐波那契数列谈起
  6. CSS实现鼠标覆盖地图省名放大效果
  7. C#实现基于ffmpeg加虹软的人脸识别demo及开发分享
  8. QR 二维码掩码(六)
  9. 单片机为什么会“死机”?看门狗来帮助你。
  10. 弘辽科技:玩转海投流量快速起爆