「稻草」Strawing

对方拒绝了你的代码并向你抛了一个异常

« 玩转btrfs子卷(subvolume)及快照(snapshot)

Android模拟电源键实现锁屏的方法(在Tasker中实现并供其它App调用,实现一键瞬间锁屏)

前提预警:ROOT Required ! 无ROOT权限的请按Ctrl+W自行下车^_^
主要是想在Launcher和手势控制上实现一键锁屏。有的一键锁屏App是通过设备管理器实现,这样锁定之后就无法用指纹了。
通过root实现的“一键锁屏”反应速度实在太慢,点击之后好几秒屏幕才黑,体验太差,于是决定自己捣鼓。
首先我们来看看Android上模拟按键的方法。一种是通过input命令。可以试试在终端中su拿到root权限之后试试输入

input keyevent 26

这个就是模拟电源键(Power Key Code 26)。可以发现,这个input程序要执行好一会,估计那些root的“一键锁屏”就是通过这个input实现的。比如像这种:
370

当然这种方法的好处就是在所有Android设备上通过。Android的KeyCode基本是一样的(除非某些厂商有骚操作?),要模拟其它键可以自行到网上查一查。

这个input实在反应太慢了(当然也有可能是我系统的问题,可以先试试用上面的方法,如果速度还能接受就不用折腾下面的了)。我们可以用一些更为原始的方法来模拟按键输入。
具体就是操作/dev/event设备。event设备对应各种输入设备,比如键盘、按键、触摸屏、鼠标等等。同样有两个工具,一个getevent可以捕获这些设备产生的事件,sendevent可以给这些event设备发送事件,实现模拟操作。
每个设备在不同的Android上的event设备号不同(比如有event0 event1 event2),事件也不同。所以需要先捕获“按下电源键”这件事对应是哪个event设备,哪个事件。
首先su提权root,然后getevent。getevent跑起来后,马上去做你想要的操作,不要做别的,否则会捕获到一堆无关的事件!
比如我按下电源键,马上松开,捕获出来的事件是这样的:
370
很明显,这四个就是按下和松开电源键的事件。
注意了,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

好了,屏幕瞬间黑了,大功告成,这响应速度比input快多多了。
接下来,就可以扔到Tasker里了(注意勾上Use Root)
370

(小Tips:如果你要跑shell的地方本身不提供提权root功能,那么你可以用su -c "your command"来实现提权)

然后就可以实现在其它地方调用Tasker这个任务(只要它能调快捷方式,选Tasker的“任务快捷方式”),实现“一键锁屏”
370

比如在我的Launcher(微软桌面)上,设置双击桌面为调用这个Task,实现双击桌面瞬间锁屏,以及Fluid N.G手势控制中右下角上滑调用。响应速度可以媲美按电源按钮。

370 370

(真香美滋滋
本文地址:https://www.liyanfeng.com/post/137.html(如转载,需注明本原文地址)

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

搜索

网站分类

最近发表

推广内容

标签(Tags)

最新评论及回复

文章归档

Powered By Z-Blog 1.8 Walle Build 100427 Designed by Han'space

Blog by Yanfeng Lee(liyafe1997)@Daocao .[Archiver].

本博客采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可,转载本站内容即代表您同意了本协议,必须署名-非商业使用-禁止演绎。