主要是想在Launcher和手势控制上实现一键锁屏。有的一键锁屏App是通过设备管理器实现,这样锁定之后就无法用指纹了。
通过root实现的“一键锁屏”反应速度实在太慢,点击之后好几秒屏幕才黑,体验太差,于是决定自己捣鼓。
首先我们来看看Android上模拟按键的方法。一种是通过input命令。可以试试在终端中su拿到root权限之后试试输入
input keyevent 26
当然这种方法的好处就是在所有Android设备上通过。Android的KeyCode基本是一样的(除非某些厂商有骚操作?),要模拟其它键可以自行到网上查一查。
这个input实在反应太慢了(当然也有可能是我系统的问题,可以先试试用上面的方法,如果速度还能接受就不用折腾下面的了)。我们可以用一些更为原始的方法来模拟按键输入。
具体就是操作/dev/event设备。event设备对应各种输入设备,比如键盘、按键、触摸屏、鼠标等等。同样有两个工具,一个getevent可以捕获这些设备产生的事件,sendevent可以给这些event设备发送事件,实现模拟操作。
每个设备在不同的Android上的event设备号不同(比如有event0 event1 event2),事件也不同。所以需要先捕获“按下电源键”这件事对应是哪个event设备,哪个事件。
首先su提权root,然后getevent。getevent跑起来后,马上去做你想要的操作,不要做别的,否则会捕获到一堆无关的事件!
比如我按下电源键,马上松开,捕获出来的事件是这样的:
很明显,这四个就是按下和松开电源键的事件。
注意了,getevent输出的数字是十六进制,而sendevent给的参数是十进制,所以0x74对应的10进制是116。
我们sendevent试试(bash可以用分号把几条命令写在同一行)
sendevent /dev/input/event0 1 116 1 ; sendevent /dev/input/event0 0 0 0 ; sendevent /dev/input/event0 1 116 0 ;sendevent /dev/input/event0 0 0 0
接下来,就可以扔到Tasker里了(注意勾上Use Root)
(小Tips:如果你要跑shell的地方本身不提供提权root功能,那么你可以用su -c "your command"来实现提权)
然后就可以实现在其它地方调用Tasker这个任务(只要它能调快捷方式,选Tasker的“任务快捷方式”),实现“一键锁屏”
比如在我的Launcher(微软桌面)上,设置双击桌面为调用这个Task,实现双击桌面瞬间锁屏,以及Fluid N.G手势控制中右下角上滑调用。响应速度可以媲美按电源按钮。
(真香美滋滋
本文地址:https://www.liyanfeng.com/post/137.html(如转载,需注明本原文地址)