由于Android4.4系统上去掉了ro.sf.hwrotation属性的支持,因为不能使用之前的方法进行屏幕旋转了。暂时没有找到相应的属性和后门,于是自己写了一个屏幕旋转的临时代码,后面找到更好的方法后再替换。具体代码如下:

~/framework/native/services/surfaceflinger/DisplayDevice.cpp

uint32_t DisplayDevice::getOrientationTransform() const {

...

if (property_get("persist.sys.hwrotation", property, NULL) > 0) {

switch (atoi(property)) {

case 90:

transform = Transform::ROT_90;

break;

case 270:

transform = Transform::ROT_270;

break;

}

}

return transform;

}

status_t DisplayDevice::orientationToTransfrom(

int orientation, int w, int h, Transform* tr)

{

...

if (property_get("persist.sys.hwrotation", property, NULL) > 0) {

switch (atoi(property)) {

case 90:

flags = Transform::ROT_90;

break;

case 270:

flags = Transform::ROT_270;

break;

}

}

tr->set(flags, w, h);

return NO_ERROR;

}

void DisplayDevice::setProjection(int orientation,

const Rect& newViewport, const Rect& newFrame) {

...

if (!frame.isValid()) {

if (property_get("persist.sys.hwrotation", property, NULL) > 0) {

switch (atoi(property)) {

case 90:

case 270:

frame = Rect(h, w);

break;

default:

frame = Rect(w, h);

break;

}

} else

frame = Rect(w, h);

} else {

...

}

}

~/framework/base/services/input/InputReader.cpp

void TouchInputMapper::configureSurface(nsecs_t when, bool* outResetNeeded) {

...

if (property_get("persist.sys.hwrotation", property, NULL) > 0) {

switch (atoi(property)) {

case 90:

mSurfaceOrientation = DISPLAY_ORIENTATION_90;

break;

case 270:

mSurfaceOrientation = DISPLAY_ORIENTATION_270;

break;

}

}

switch (mSurfaceOrientation) {

case DISPLAY_ORIENTATION_90:

case DISPLAY_ORIENTATION_270:

}

~/framework/native/services/surfaceflinger/SurfaceFlinger.cpp

status_t SurfaceFlinger::getDisplayInfo(const sp& display, DisplayInfo* info) {

...

info->w = hwc.getWidth(type);

info->h = hwc.getHeight(type);

if (property_get("persist.sys.hwrotation", property, NULL) > 0) {

switch (atoi(property)) {

case 90:

case 270:

if (type != DisplayDevice::DISPLAY_EXTERNAL) {

info->w = hwc.getHeight(type);

info->h = hwc.getWidth(type);

}

break;

default:

break;

}

}

info->xdpi = xdpi;

info->ydpi = ydpi;

info->fps = float(1e9 / hwc.getRefreshPeriod(type));

...

}

void SurfaceFlinger::onInitializeDisplays() {

...

d.orientation = DisplayState::eOrientationDefault;

char property[PROPERTY_VALUE_MAX];

if (property_get("persist.sys.hwrotation", property, NULL) > 0){

switch (atoi(property)) {

case 0:

d.orientation = DisplayState::eOrientationDefault;

break;

case 90:

d.orientation = DisplayState::eOrientation90;

break;

case 180:

d.orientation = DisplayState::eOrientation180;

break;

case 270:

d.orientation = DisplayState::eOrientation270;

break;

default:

d.orientation = DisplayState::eOrientationDefault;

break;

}

} else {

d.orientation = DisplayState::eOrientationDefault;

}

d.frame.makeInvalid();

d.viewport.makeInvalid();

}

~/framework/base/services/java/com/android/server/wm/WindowManagerService.java

boolean updateOrientationFromAppTokensLocked(boolean inTransaction) {

...

if (req != mForcedAppOrientation) {

if ("0".equals(SystemProperties.get("persist.sys.hwrotation", "0")))

req = ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT;

else if ("90".equals(SystemProperties.get("persist.sys.hwrotation", "0")))

req = ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE;

else if ("180".equals(SystemProperties.get("persist.sys.hwrotation", "0")))

req = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;

else if ("270".equals(SystemProperties.get("persist.sys.hwrotation", "0")))

req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

else

req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;

}

...

}

android 4.4 屏幕方向,Android4.4屏幕旋转功能相关推荐

  1. Flutter中获取监听屏幕方向、锁定屏幕方向

    文章目录 获取当前屏幕的方向 实时监听屏幕方向的改变 锁定屏幕方向 锁定方向,禁止App随着设备的方向改变 锁定启动图的方向 默认效果 Android配置 IOS配置 动态改变Flutter的屏幕方向 ...

  2. H5+ 常用API(拨打电话,设备震动,屏幕方向,屏幕亮度,设备信息...等)

    写在前面 H5+ 所有功能都只能在 plusReady 事件加载完成后调用 mui.plusReady(function() { // 扩展API加载完成事件var self = plus.webvi ...

  3. Android屏幕方向调整的两种方式

    Android屏幕方向调整 作者:坚果 公众号:"大前端之旅" 华为云享专家,InfoQ签约作者,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术 ...

  4. android+note2+分辨率,Android自适应屏幕方向、大小和分辨率

    屏幕大小 1.不同的layout Android手机屏幕大小不一,有480x320,640x360,800x480.怎样才能让App自动适应不同的屏幕呢?其实很简单,只需要在res目录下创建不同的la ...

  5. android无法自动旋屏,Android 手动设置屏幕方向后不能自动转屏问题

    如题,Android在手动设置屏幕方向后不能使用自动转屏了,这是因为手动设置屏幕方向 如: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATIO ...

  6. 在Android的 设置-显示 中增加控制屏幕旋转方向的选项

    在Android的 设置->显示 中增加控制屏幕旋转方向的选项 参考博文 实现目标 效果局限 代码实现 配置资源文件 界面搭建 功能实现 默认值修改 其他情况 结语 参考博文 Android-x ...

  7. android 获得屏幕方向,Android 获取设置屏幕横竖屏

    Android 获取设置屏幕横竖屏 发布时间:2020-08-06 03:23:17 来源:51CTO 阅读:351 作者:huyanruirui 方法一: screenOrientation = a ...

  8. android自适应屏幕方向,Android 屏幕自适应方向尺寸与分辨率-Fun言

    摘要:  Android 屏幕自适应方向尺寸与分辨率,android 自适应分辨率,android 屏幕自适应,android 图片自适应,android 横屏布局,包括屏幕界面布局.多分辨率支持.获 ...

  9. android获取键盘状态,Android获取屏幕方向及键盘状态的小例子

    Android获取屏幕方向及键盘状态的小例子 复制代码 代码如下: Configuration config = getResources().getConfiguration(); if (conf ...

最新文章

  1. ChineseCalendar类[转]
  2. python深拷贝一个对象_Python对象的深拷贝和浅拷贝详解
  3. 82.开始→运行→输入的命令集锦
  4. cfile 修改某些位_王者荣耀:打野刀效果再次修改,自定义房间配置试运行!
  5. Java 8:长期支持的堡垒
  6. 利用cookie的跨域单点登录的简单实现
  7. (44)常用终端命令总结
  8. 七牛sdk 上传视频 - 前端
  9. python乌龟吃鱼小游戏(类和对象及Easygui应用)
  10. 对话状态跟踪学习笔记
  11. MySQL临时表的作用
  12. 小公司老板的日常管理
  13. 从端到边缘,无线技术赋能AI边缘计算处理器
  14. 硬链接和符号链接详解
  15. 数据库-SQL Server数据库查询速度慢(连接超时)原因及优化方法
  16. Unity 3D模型动画导出为帧序列
  17. 通过Pyecharts绘制可视化地球竟 然如此简单
  18. 【C语言入门简单程序】三子棋——新手轻松学
  19. 打单工具有哪些?拼多多商家如何打单?
  20. 数据库的原理,一篇文章搞定(三)

热门文章

  1. 工程设计论——如何写好工程代码
  2. 面向B端算法实时业务支撑的工程实践
  3. 持续定义Saas模式云数据仓库+实时搜索
  4. Kubernetes 日志查询分析实践
  5. 十余位权威专家深度解读,达摩院2019十大科技趋势点燃科技热情
  6. 函数计算搭建 Serverless Web 应用(一)- HTTP 触发器
  7. 搭建一个高可用的镜像仓库,这是我见过最详细、最简单的教程
  8. 60+ 安全厂商的选择,为何 TA 一直坚持做威胁情报供应商?
  9. DevOps:从「蒸汽时代」到「高铁时代」,SUNMI DevOps转型之路 | 原力计划
  10. 漫话:如何给女朋友解释什么是系统可用性? | 技术头条