利用termux-api和at指令实现可视化定时自动关闭wifi和蓝牙

本文最后更新于:2022年4月3日 上午

背景

所谓需求是人类进步的阶梯。

昨天晚上也就是今天凌晨233我漫无目的地刷着youtube,享受着科学上网带来的方便。突然直接按刷到了一个ASMR的视频,我听着感觉非常舒服,不会再胡思乱想了,很快就能进入入睡状态。遂决定带着耳机睡觉。平板便亮着屏幕放一边了。

过了一会儿,我突然意识到这可不行,平板一直亮着那我一起来不就没电了!但是屏幕不亮的话浏览器又不能正常运行。所以我马上坐起来,着手写一个关屏幕脚本。以下是我在凌晨很快写出来的临时脚本。

1
2
sleep 10000 #睡眠10000s,因为那个视频大概3个小时
sudo input keyevent 223

好吧,这个临时脚本low爆了,但是也确实实现了功能,我一早起来屏幕是灭的,电量是充足的,youtube的视频也被定格在了2小时40几分钟。

但是它的问题很严重。

  1. 不能后台运行
  2. 只关闭了屏幕,wifi和蓝牙没有关,依然耗电。

所以我今早一起来便开始研究改进方法,希望实现优雅的定时关屏幕、关wifi、关蓝牙。

解决办法

利用termux-api这个强大的工具,上午研究它的时候发现了一些非常好玩的用法,这里举两个例子。老杜看到了不要捶我

  1. 提示框。一句简单的termux-dialog命令就能调出安卓自带的提示框,而且种类繁多,非常牛逼。

termux-dialog

老杜是以下那一种?
  1. 可以直接把文字用谷歌的tts TextToSpeech念出来,至于音色嘛,就是大家熟悉的营销号2333。

termux-tts-speak

以下为珍贵的音频片段

 

ok,我们了解到了termux-api的强大功能,在本次实践中的一个主要动作就是确定时间,因为我要根据ASMR视频的时长来确定什么时候关闭屏幕,这里我用到了termux-api中的 termux-dialog time,一运行就会弹出系统自带的时间选择器。

时间选择器

选择后会返回一个json格式的数据。

json

我们可以利用jq这个命令来处理json数据,以下命令就能获得返回的时间

1
termux-dialog time | jq .text

time

获得了时间,我们得需要一个方法来让termux到了时间自动执行屏幕、wifi、蓝牙的脚本。这里直接先给出switchoff.sh脚本。利用了svc这个安卓自带的命令来关闭wifi和蓝牙,利用input keyevent 223来熄屏幕,十分简单。

1
2
3
sudo svc wifi disable
sudo svc bluetooth disable
sudo input keyevent 223

定时运行脚本,之前接触过crontab这个强大的命令,但是crontab适合那种需要重复执行的脚本,而我这个关屏幕只需要运行一次,不太合适。

经过我的搜索,我发现了一个完美符合我预期的命令,at。以下给出smartswitchoff.sh脚本。

1
2
3
4
5
time=`termux-dialog time | jq .text | awk '{print substr($1,2,5)}'`	#获得用户输入的时间
at -f ~/.shortcuts/switchoff.sh "$time" #定时执行switchoff.sh
termux-toast -g top "pad将会在$time关闭屏幕、wifi与蓝牙" #以下三行为提示,自上而下,十分震撼2333
termux-toast -g middle "pad将会在$time关闭屏幕、wifi与蓝牙"
termux-toast -g bottom "pad将会在$time关闭屏幕、wifi与蓝牙"

以下为演示视频
视频中利用了termux widget这个插件,将~/.shortcuts这个文件夹下的shell脚本可以通过桌面小控件的方式放在桌面上,实现点击运行。运行后我将switchoff时间设置在了下一分钟,点击确定后,从上至下的提示文字闪过。最后到达下一分钟,wifi按钮和蓝牙按钮依次点灭。最后屏幕熄灭。一套动作行云流水,十分优雅。完了,吹过了

战术总结

前几天那个adb命令打开app那篇博客里嘲讽了一下termux,这里我对termux郑重道歉。termux绝对是安卓端最强终端!

之前我对termux不屑的原因是因为我以为在termux里不能使用安卓自带的命令。而大家也看到了,我在今天的脚本里多次用到了安卓命令,比如svcinput keyevent等等,而这些只需要在termux里进入root用户就可以用,简直无敌。

今天也是见证了termux-api的强大,几句命令就实现了可视化界面交互体验,有一种开发app的感觉(

给大家炫耀一下我的termux全家桶(

termux全家桶

今天可以安心听着ASMR睡觉啦!


利用termux-api和at指令实现可视化定时自动关闭wifi和蓝牙
https://wuuconix.link/2021/08/09/termux-api/
作者
wuuconix
发布于
2021年8月9日
许可协议