Android5.1 Launcher3 强制横屏

  在老板的各种威逼利诱之下开始搞Launcher,一周下来也误打误撞地解决了一些需求,用几篇文章来做一个总结。

  第一个需求是Launcher的横屏显示,其实客户真正的需求是系统横屏,刚开始什么都不知道,就去研究Launcher怎么横屏。

  从网上找到Android Studio平台的代码,才知道所谓的Launcher其实就是个应用,只不过是比较牛逼的系统应用而已。源代码可以去官网下载,地址是:https://android.googlesource.com/platform/packages/apps/Launcher3。

  既然是应用,那方向就可以在清单文件里通过screenOrientation设置。我之前还奇怪为什么我的手机桌面不能重力感应,原来源码里screenOrientation的值是”nosensor“。将nosensor改为landscape,部署到手机,成功!

  刚高兴了没一会,发现在linux系统下整机编译后Launcher还是竖着的。这里说明一下,我们这个项目是要做一个整机,不是只改Launcher。

  查资料,发现Launcher里有个方法会解锁屏幕锁定:unlockScreenOrientation(true),将true改为false,即不解锁屏幕锁定。然并卵。又试着在onResume里转屏:

if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
  依然并卵。

  这个时候才开始想到为什么不干脆让整个系统都转过来,去framwork层改。

  网上一番查找验证后终于解决问题。修改frameworks\base\policy\src\com\android\internal\policy\impl目录下的PhoneWindowManager.java的rotationForOrientationLw方法,将所有return改成:

return mLandscapeRotation;

  mLandscapeRotation为默认的横屏方向。不要使用Surface.ROTATION_0,因为该值是会根据当前设备的宽高动态调整的。 

  大功告成。

  期间还有个小插曲。用上面的方法改好后我单独编译了下frameworks,然后Download到设备上,不行。这时候我已经放弃了,跟老板说让驱动兄弟去弄吧。结果第二天驱动兄弟花两个小时把整个项目重新编译了下屏幕竟然横过来了。我再在我的设备上Download了下system.img,真的横过来了。运气是真的很重要。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值