由于项目需要,使用了竖屏当横屏用,所以需要将系统显示旋转90度,我们目前平台是基于高通QCM6125安卓10.0系统。为了方便以后其他角度的旋转,添加了persist.panel.orientation 属性来控制角度。

  1. 开机动画
frameworks/base/cmds/bootanimation/BootAnimation.cpp@@ -279,11 +279,36 @@ status_t BootAnimation::readyToRun() {if (status)return -1;+    char rAngleValue[PROPERTY_VALUE_MAX];
+    property_get("persist.panel.orientation", rAngleValue, "0");
+    int rAngle = atoi(rAngleValue);
+    SurfaceComposerClient::Transaction t;
+
+    if ( rAngle == 90) {+        int temp = dinfo.h;
+        dinfo.h= dinfo.w;
+        dinfo.w= temp;
+        Rect destRect(dinfo.w, dinfo.h);
+        t.setDisplayProjection(mDisplayToken, 1, destRect, destRect);//orient=1
+        ALOGD("BootAnimation default set rotation to be 90...");
+     } else if (rAngle == 180) {+        Rect destRect(dinfo.w, dinfo.h);
+        t.setDisplayProjection(mDisplayToken, 2, destRect, destRect);//orient=2
+        ALOGD("BootAnimation default set rotation to be 180...");
+     } else if (rAngle == 270) {+        int temp = dinfo.h;
+        dinfo.h= dinfo.w;
+        dinfo.w= temp;
+        Rect destRect(dinfo.w, dinfo.h);
+        t.setDisplayProjection(mDisplayToken, 3, destRect, destRect);//orient=3
+        ALOGD("BootAnimation default set rotation to be 270...");
+    }
+// create the native surfacesp<SurfaceControl> control = session()->createSurface(String8("BootAnimation"),dinfo.w, dinfo.h, PIXEL_FORMAT_RGB_565);-    SurfaceComposerClient::Transaction t;
+    //SurfaceComposerClient::Transaction t;t.setLayer(control, 0x40000000).apply();
  1. 进入桌面后
frameworks/base/core/java/com/android/internal/view/RotationPolicy.java
import android.os.UserHandle;
+import android.os.SystemProperties;import android.provider.Settings;import android.util.Log;import android.view.Display;
@@ -42,7 +43,7 @@ public final class RotationPolicy {private static final String TAG = "RotationPolicy";private static final int CURRENT_ROTATION = -1;-    public static final int NATURAL_ROTATION = Surface.ROTATION_0;
+    public static final int NATURAL_ROTATION = SystemProperties.getInt("persist.panel.orientation", 0) / 90;
private RotationPolicy() {
frameworks/base/services/core/java/com/android/server/wm/DisplayContent.java
+import android.os.SystemProperties;import android.util.ArraySet;import android.util.DisplayMetrics;import android.util.Slog;
@@ -361,7 +362,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo** @see #updateRotationUnchecked()*/
-    private int mRotation = 0;
+    private int mRotation = SystemProperties.getInt("persist.panel.orientation", 0) / 90;/*** Last applied orientation of the display.
@@ -1370,6 +1371,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo*         UNFREEZE THE SCREEN.*/boolean updateRotationUnchecked(boolean forceUpdate) {+
+        if(true){+            return true;
+        }ScreenRotationAnimation screenRotationAnimation;if (!forceUpdate) {if (mDeferredRotationPauseCount > 0) {

updateRotationUnchecked方法里不直接返回true,会出现进入桌面一瞬间竖屏再转横屏。
3. 系统导航栏位置
将系统导航栏位置固定在底部,如果不需要这里不用修改。

frameworks\base\services\core\java\com\android\server\wm\DisplayPolicy.java
@NavigationBarPositionint navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {-        if (navigationBarCanMove() && displayWidth > displayHeight) {+        /*if (navigationBarCanMove() && displayWidth > displayHeight) {if (displayRotation == Surface.ROTATION_270) {return NAV_BAR_LEFT;} else if (displayRotation == Surface.ROTATION_90) {return NAV_BAR_RIGHT;}
-        }
+        }*/return NAV_BAR_BOTTOM;}
  1. recovery ui
bootable/recovery/minui/graphics.cpp
@@ -401,6 +401,19 @@ int gr_init() {} else {  // "ROTATION_NONE" or unknown stringgr_rotate(GRRotation::NONE);}
+
+  int rotation_user =
+      android::base::GetIntProperty("persist.panel.orientation", 0);
+  if(90 == rotation_user){+         rotation = GRRotation::RIGHT;
+  }else if(180 == rotation_user){+         rotation = GRRotation::DOWN;
+  }else if(270 == rotation_user){+         rotation = GRRotation::LEFT;
+  }else{+         rotation = GRRotation::NONE;
+  }
+
if (gr_draw->pixel_bytes != 4) {
  1. mk文件里设置persist.panel.orientation默认值,选配0/90/180/270
  2. LK阶段开机图片
    高通使用splash.img存储LK的开机动画,在device/qcom/common/display/logo/logo.png
    添加对应分辨率的图片,手动旋转相应的角度后,重新打包编译splash.img下载进去。

高通安卓Q显示屏不同角度旋转竖屏横屏切换相关推荐

  1. 高通安卓调试LCD几方面总结

    来公司上班现在已经整整一个月了,蔽人不才,能力有限,学习进度缓慢,不过也是有一点点的收获与心得,在这里写出来与大家分享,养成良好的记录习惯也免得后忘记. 不啰嗦了,开入正题.来公司一个月左右的时间,主 ...

  2. android backtrace,高通android q 通过backtrace使用addr2ine工具定位crash问题记录

    高通android q 通过backtrace使用addr2ine工具定位crash问题记录 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录 cras ...

  3. 高通安卓关闭WiFi服务不卸载驱动

    高通安卓关闭WiFi不卸载驱动 由于客户的算法在注册授权时,会读取机器的一些硬件信息作为凭证,如果下次调用算法时,硬件信息不一致时,算法会注销不能再使用.硬件信息包括了WiFi的Mac地址,可是WiF ...

  4. 高通平台android7.1系统显示旋转180度

    实现方法 内核层修改 kernel\msm-3.18\arch\arm\boot\dts\qcom\dsi-panel-lm215w-lvds-1080p-video.dtsi增加qcom,mdss- ...

  5. 高通 安卓 Uefi 的理解

    最近接触了高通bootloader,对UEFI有了一些理解,虽说不深入,俗话说不总结等于没学,因此还是小小总结一下: UEFI早在PC领域名声大噪,UEFI+gpt以其自身优点干翻了传统bios+mb ...

  6. 高通android q 通过backtrace,使用addr2ine工具,定位crash问题记录

    crash日志记录如下: 1.找到带有符号表的相应的库文件或者可执行文件: 高通sda660为例,我这里目录是 android/out/target/product/sdm660_64/symbols ...

  7. 高通安卓平台BOARD-ID和MSM-ID

    文章目录 BOARD-ID 传统格式 最新的格式 MSM-ID BOARD-ID 说明文档目录:kernel/msm4.14/Documentation/devicetree/bindings/arm ...

  8. 高通安卓msm8909适配gt1xx系列的TP

    最近新开发项目,需要适配新的TP,lcd等等,因为更换了TP IC,适配需要更换驱动和节点信息等等,为了以后快速适配,写下来作为记录. 准备东西 1.找厂商拿配置文件,一般会提供xxxxx.cfg文件 ...

  9. 高通410随身WiFi之uz801系列的板子怎么切换卡上网

    首先准备一个 uz801的随身WiFi 才开看看 有没有卡槽,没有的话,你还要自己焊接 下面是正面 下一步 通电上机 打开手机连接上 去找到网关地址,例如 192.168.100.1  不代表全部 设 ...

最新文章

  1. 基于Python的QPSK音频的波形和频谱
  2. 点云 DBSCAN 对点云障碍物聚类
  3. yum下载包保存到本地
  4. android 入门-工序
  5. linux线程同步(4)-自旋锁
  6. HighNewTech:重磅!来自深度学习的三位大牛Yoshua、Hinton、LeCun荣获2018年图灵奖
  7. js修改地址栏url_不同寻常的地址栏过渡
  8. java的比较运算符是_Java 基础(比较运算符,逻辑运算符,三元运算符)
  9. jni c 传递对象到java_JNI将二进制数据从C传递到Java
  10. 对TCP/IP协议的一些看法(13):IP路由
  11. Python基础教程 第六章 学习笔记
  12. Python入门--列表生成式
  13. python开发环境
  14. 9. Doctrine2
  15. Java Interview Questions (1)
  16. C++ 归并排序与快速排序
  17. Java基础——学生管理系统
  18. 缺陷分析之缺陷预防的过程
  19. ASCII码与英文的显示原理
  20. NOD32升级ID,免费ID升级网址

热门文章

  1. python 题库自动答题_国家开放大学(国开)线上作业自动答题python-selenium
  2. #9 Palindrome Number
  3. 清除SVN客户端缓存凭据的方法
  4. kafka和pulsar的区别
  5. 谁说婚纱只能穿裙子 2015另类裤装婚纱更显个性
  6. 数据大屏可视化2-超全的基础图形模板(基础模版)
  7. 浏览器攻击框架BeEF Part 2:初始化控制
  8. 内存卡里被删除的东西如何恢复
  9. 计算机专业该学那些知识
  10. 用自信克服恐惧心理——职场人士寓言(15)