ZKX's LAB

随手截屏用完当删:用 Tasker 做好 Android 截图管理

2020-12-01新闻15

Android10内置了一个比较不错的截图管理工具:截图时通知栏中会保留一项截图成功的通知,分享对应的截图后,我们可以直接借助这个通知进行及时清理,避免没有存档价值的截图在设备中长期滞留形成堆积。

左图Android10PixelC,右图Android11Pixel5

但这个实用的小通知在Android11引入新的截图交互后却被一并取消了,新的截图UI虽然好看,但多了视觉少了体验,如果不点击进入截图编辑器就无法及时进行清理。

好在自动化工具Tasker的存在,让截图管理在Android11中也能得心应手。

最终效果演示|图:ClydeTasker模式和个人需求

Tasker作为一款自动化工具来说,上手制作模块并不复杂。就如下图所示,其核心主要由「条件」和「任务」构成,其中「条件」可以按照某个事件或状态等作为限制,而满足「条件」后,便会自动执行设定好的「任务」。所以当用户有了场景后,就可以将需求进行分解,然后分配到每个元素中去。

Tasker的基本工作模式

针对于「截图管理」而言,我们最后需要实现的就是:

在截图时,系统弹出通知,可以选择删除或保留,以此来优化Android11的交互方案。

针对这段话进行拆分,然后带入到文章上面提及的基本元素中:

条件:截图时

任务:弹出通知

如果我们进一步的针对「任务」进行细化,便可以获得更加详细的弹窗定义:

特征一:弹窗需要有删除和保留按钮

特征二:优化现有交互,关闭现有悬浮框

Android11截图操作优化的基本思路

这样一来整个大体流程就算定义明确,剩下的便是调用Tasker内部的各项功能去实现了。

Step1.监测截图弹窗

打开Tasker,点击右下角加号按钮选择「添加」,输入命名后,就可以可以拥有一个新的项目,也就是前文所说的「模块」。

截图的动作在Tasker内置的事件和状态中都没有,所以只能通过Android系统本身的日志文件来捕捉这一瞬间的事件,Tasker的logcatentry为我们为提供了这一可能:点击左下角的Add按钮添加一个「条件」,并在列表中选择「事件>系统>LogcatEntry」。

由于并不知道截图操作在系统日志中的具体信息,这里我们需要借助Tasker的采集功能进行定位。点击Component标签中的放大镜按钮,弹窗选择确定后Tasker会生成一个浮窗开始按钮。

Component>定位教程>log捕获浮窗

点击开始后,我们只需要像平时一样正常执行截图操作,完成后再点击Tasker浮窗停止即可。停止后返回Tasker,我们就得到了刚才这时间里的系统日志,随后通过检索关键词screenshot来获得相关字段。其中GlobalScreenshot:clearingscreenshot:newscreenshotrequested就是截图的事件信息,单击选项即可完成填充。

捕获完成>日志定位>完成添加

最后点击左上角的返回按钮,便完成了条件的设定。

Step2.做一个截图通知

搭建通知框架

设定好一个触发条件后,Tasker随机就会提示我们添加一项「任务」来完成配对,这里我们新建名为截图弹窗任务即可。

跳转「任务」界面后点击右下角的Add按钮,选择「警报>通知」便可添加一个通知——以下设置决定了我们最终生成的通知「长什么样子」。

添加与触发事件配对的对应任务:截图弹窗

在项目设定页面中,针对通知的标题、内容、图标、命名等进行设定:

Category1设定一个名字,后续可以在Android系统通知中单独针对这个通知进行管理

根据之前厘清的特征一,在操作的栏目中加入两个项目,标签分别名为「删除」和「保留」

上述项目中的具体操作我们暂时保留不动

「警报>通知」的基本设定

上面所建立的删除和保留按钮,在最终通知中表现为两个可以操作的动作按钮,而在Tasker中进行设定时,我们则可以将其理解为两个不同的「任务」,具体的任务会在我们点击各自通知按钮的时候执行——有那么点「套娃」的意思。

再看一遍示意图|图:Clyde

针对这两项任务厘清运行的流程:

删除:找到截图文件夹中的最新截图>删除截图>清除这条通知

保留:不对截图进行任何操作>清除这条通知

通知按钮的设计思路配置「删除」按钮

在Tasker顶部选择「任务」一栏,点击左下角的Add按钮添加一个「任务」。命名为删除后,按照上述流程添加步骤,选择「文件>列出文件」,然后在目录标签下选择截图所在的文件夹「Pictures>Screenshot」,排列选项栏目选择「修改日期,反向」,变量填写%file,最后返回保存设置。

添加任务「删除」并设定最新截图文件检索规则

简单解释一下上述设置:「列出文件」的操作其实是获取文件夹中所有文件的路径,获取的信息全部存入变量%file,所以%file实际上是一个数组,所有文件会按照修改日期的逆向排序依次存入数组中。

%file数组解释

因为我们的需求是「最新的那张截图」,所以只需要用到数组第一个数据%file1:点击左下角的Add按钮添加下一步「删除截图」,选择「文件>删除文件」,在文件栏目下输入地址%file1。

配置通知自动清除

在点击按钮删除截图后,我们有必要额外增加指令对这条通知本身进行清除,否则在我们滑动清除前,这条通知会一直保留在通知栏中,不太符合「用完即走」的理念。

因此在完成对「删除截图」这一核心操作的配置后,我们还需要继续添加步骤,选择「警报>通知取消」,在标题中填写之前通知设定的标题信息即可。完成后退回至任务界面后,删除按钮的配置步骤这才算完成了。

为「删除」行为增加通知自动清除规则

同样的道理,虽然第二项保留任务的作其实是「什么都不做」,但我们也需要为其配置自动清除规则:点击左下角的Add按钮重新添加一个「任务」,命名为保留后,添加步骤选择「警报>通知取消」,在标题中填写之前通知设定的标题信息即可。

保留按钮的配置,可以被看作是没有清除文件行为的「删除」

完成删除和保留两个按钮的配置后,接下来要做的就是将它们关联至最开始配置好的通知框架里了:点击截图弹窗任务并选择步骤一,点击操作栏目下已追加好的「删除」和「保留」。在每一项的设定中点击放大镜按钮,选择「任务-执行任务」。在名称下利用放大镜按钮选择相应的任务即可,即删除中选删除任务,保留中选保留任务。

将做好的两个按钮操作绑定至通知框架中

返回到配置文件的页面保存,整个模块到这里就可以使用了。

Step3.模块细节优化

做完上面的步骤,整个配置文件其实就已经可以使用了。但实际使用的过程中你可能会发现一些不那么人性化的地方,比如:

删除后没有感觉,不确定截图是否被删除

原有的浮窗需要手动点击关闭,或等待5s后才可以关闭,因此会存在图片已经删除,但浮窗仍存在的尴尬情况

如果你想进一步解决以上两大「痒点」,也我们可以在刚才建立好模块中稍作改进。

监测截图删除结果

针对于第一点确认是否被删除,简单一点说只要在删除后确认数组中的第一个文件路径是否和之前一致便可以判断是否成功删除完成。大致的流程如下图所示:

监测流程示意

所以前往任务栏中,打开删除任务,按照厘清流程添加步骤,选择「文件>列出文件」。在目录标签下选择截图所在的文件夹「Pictures>Screenshot」,排列选项栏目选择「修改日期,反向」,变量填写%newfile。返回后长按该步骤进行拖拽,移动至第二步骤删除文件后。

对删除任务进行改进

然后添加新步骤追加截图成功删除的通知,选择「警报>通知」并填写标题、文字以及Category。在If栏目下选择%file1!=%newfile1,以此来匹配删除前后的文件夹中第一个文件的路径信息是否一致,便可以在满足该条件时才执行通知。

新增提示通知

为了避免截图通知弹窗点击删除后,立刻弹出删除成功的通知而显的较为生涩。可以添加新步骤,选择「任务>等待」,设定1秒等待时间。设定完成后,将等待步骤拖拽至删除成功通知步骤之前。

添加一点合适的等待时间

另外和上面的通知一样,如果删除成功的通知不进行取消也会一直滞留在通知中心中。所以在截图成功通知后我们追加等待3s步骤以及针对该通知取消的步骤。

添加通知取消步骤自动关闭浮窗

因为无法通过修改内置参数直接关闭浮窗,所以曲线救国的方案就是模拟点击屏幕进行关闭。其次,考虑设备在横竖屏期间浮窗的位置存在一定差别,所以需要分情况进行点击。

大致的流程如下图所示:

通过模拟点击关闭截图浮窗

首先,进入Android的「设置>系统>开发者选项」,在输入标签下打开指针位置。在屏幕左上方的X以及Y的数值便是触控点位的坐标。在横屏以及竖屏状态分别截图后,定位至取消按钮处即可。获得Pixel5的相关坐标信息如下(不同设备的点位可能存在差别,以下数据不通用):

横屏状态:X=633,Y=742

竖屏状态:X=265,Y=1779

获取点击位置的坐标

由于横竖屏的状态没有作为内置变量可以直接使用,所以需要将显示方向作为条件去定义变量信息。在配置文件栏目,点击左下角的Add按钮添加一个「条件」,并在列表中选择「状态>显示>屏幕显示方向」,确认设置为竖屏后返回。

配置竖屏点击位置

在提示新建任务后,命名为屏幕方向任务即可。跳转「任务」界面后,可以点击右下角的Add按钮,选择「变量>变量定义」,名称定义为%DisplayOtientation,发往位置填写1,完成后返回至配置文件栏目即可。

配置屏幕方向位置

长按右侧的屏幕方向任务,选择添加退出任务,命名为屏幕方向横,并再次选择「变量-变量定义」,名称定义为%DisplayOtientation,发往填写2。这样一来便可以实现在非竖屏情况下,变量的数值切换为2。

配置横屏

拥有条件变量以后,便可以回到删除任务的步骤中,添加判断和点击步骤。首先选择添加「任务-If」,条件设定为%DisplayOtientation=1,即屏幕显示方向为竖屏时。最后插入操作选择「If>Else>EndIf」,并将三个步骤拖拽至第四步通知取消之后。

设置横竖屏判断

再添加两个点击操作,分别对应横屏和竖屏的点击。选择添加「代码>运行Shell」,分别在命令中填写inputtap633742和inputtap2651779,同时勾选使用Root。返回后将两个指令分别拖拽至If-Else之间以及Else-EndIf之间。

返回配置文件保存,整个脚本就算优化完成了。

优化完成

Ps:如果你的手机没有Root,可以在Autoinput这款App来代替Shell命令。

效果展示小结

以上就是利用Tasker在Android11上优化截图管理的全部内容了,关于文中涉及的成品模块,可以移步这里进行下载并直接导入使用,里面包含了两种解决思路,可以导入后进行感受。

如果你有更好的方案或是其它Tasker应用实例,欢迎向Android玩法专栏进行投稿~

致谢:

感谢@yzlnew的相关指导

感谢@Clyde提供的替代思路(详情见评论区)

注:本文作者实现环境,Pixel5已Root,系统版本Android11,Tasker为GooglePlay版本。

#Android系统

随机阅读

qrcode
访问手机版