针对手机系统是debug版本的,因为生产版本不让用户自己修改系统的一些参数
先上代码解释清楚原理,点击power按钮,系统会发消息给KeyguardViewMediator,然后消息传递给KeyguardViewManager,然后会掉用show方法,来显示锁屏。具体的创建锁屏view又会调用maybeCreateKeyguardLocked方法,现在来具体看下这个方法
这个方法里的lp.screenOrientation = enableScreenRotation ? ActivityInfo.SCREEN_ORIENTATION_USER : ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;就是在设置锁屏横竖屏。如果enableScreenRotation为true则屏幕根据用户拿手机方式自感应。false反之。我们在这里就是想让enableScreenRotation为true,这样锁屏才能横屏
进一步就看boolean enableScreenRotation = shouldEnableScreenRotation();然后具体看这个shouldEnableScreenRotation方法。容易看到具体的true或者false是根据lockscreen.rot_override和config_enableLockScreenRotation决定的。只要其中一个为true,enableScreenRotation的值就为true。然而config_enableLockScreenRotation的值通过查找为false,这样就需要我们修改lockscreen.rot_override的值为true,来实现目的
但是搜索整个framework代码发现,只有get此值的地方,没有set的地方。后来再看发现,此值是个SystemProperties,于是通过adb shell setprop lockscreen.rot_override也没有找到此系统参数。最后推测谷歌原生代码,并未对此参数进行设置,这也就解释了为什么不能横屏,因为shouldEnableScreenRotation一直返回的值为false。
首先打开cmd 窗口,adb root 获得手机root权限。adb remount,获得写权限。adb shell setprop lockscreen.rot_override true
ok,大功告成,看效果
手机设置屏幕锁定的操作方法:待机-应用程序-设定-(设备/声音及显示)-锁定屏幕-屏幕锁定-选择锁定方式。
以设置图案锁屏为例:选择图案锁屏后屏幕会出现九宫格,您需要自行绘制图形轨迹,点击继续系统会提示再次确认图形轨迹,点击确定后会提示您设置备份PIN码,以免您忘记图形时可以使用PIN密码解锁。正确输入两次PIN码后,图案锁屏设置成功。
如果你的手机支持重力感应,那么可以把手机里的自动转屏打开,然后再横置手机,手机便横屏了.当然了,你再次竖置手机的时候,手机又回到竖屏了.
如果手机不支持重力感应,那么也就没有这个选项,通常这个自动转屏选项在下拉菜单里面会有,没有的话就在设置里的显示里面找.如果还没有就有两种可能,一种是手机厂商美化时将这个设置放在了别的地方(要自己去找),还有就是手机根本就不支持横屏(虽说有重力感应模块).