由于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. matlab datetime时间处理、时间转换
  2. 从HashiCorp Nomad对上百万容器进行调度所学到的经验
  3. 程序练习:Matlab 实现最小二乘法
  4. 【caffe-matlab】使用matlab训练caffe及绘制loss
  5. 补习系列(12)-springboot 与邮件发送
  6. 将三角形绕点b顺时针旋转90度_模型 | 图形旋转与翻折题型汇编
  7. java制作纯字rpg小游戏_求java rpg小游戏源代码 最好是文字rpg 不需要很复杂 只是交作业用...
  8. 计算机应用基础 东师 离线,奥鹏东师秋季计算机应用基础离线作业答案
  9. 提交表单的时候会出现提交两次的问题
  10. 区块链 智能合约安全 重入攻击(re-entrancy attack)DAO incident
  11. 根据题目完成以下50道SQL语句
  12. 2018-11高级软考试题考查知识点总结(试题1-20)
  13. STA series --- 3.Standard cell library(PART-I)
  14. 同济大学软件学院特聘教授朱少民谈《测试,从哪里来,到哪里去》
  15. 深信服“监控员工跳槽倾向”引争议,律师称未告知员工涉嫌违法
  16. vue3+ts+vite,使用高德api实现搜索城市展示在地图上
  17. 学术论文rebuttal
  18. SQL函数--按指定符号分割字符串
  19. 湖南农业大学计算机考试试题,湖南农业大学机械CADCAM考试复习题
  20. LearnOpenGL笔记->入门->变换与坐标系统

热门文章

  1. KubeVela v1.2 发布:你要的图形化操作控制台 VelaUX 终于来了
  2. 怕入错行?这群技术人写了本“择业指南”
  3. 应用配置管理ACM 使用场景快速入门
  4. 车联网上云最佳实践(二)
  5. 19个AI热门应用领域,你确定不了解一下?
  6. 【免费公测中】为数据赋予超能力,阿里云重磅推出Serverless数据分析引擎-Data Lake Analytics
  7. OpenStack 如何跨版本升级
  8. 技术大佬:今年还学Python,傻了吧? 网友:就你敢说!
  9. 【重磅快讯】T11 2019数据智能技术峰会举办,AI将成为行业颠覆者
  10. 阿里数据总监分享《阿里数据中台建设实践案例》,PPT+语音讲解!