9

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

 3 years ago
source link: https://sspai.com/post/63846
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

1左图 Android 10 Pixel C ,右图 Android 11 Pixel 5

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

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

1最终效果演示 | 图:Clyde

Tasker 模式和个人需求

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

1Tasker 的基本工作模式

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

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

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

  • 条件: 截图时
  • 任务: 弹出通知

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

  • 特征一: 弹窗需要有删除和保留按钮
  • 特征二: 优化现有交互,关闭现有悬浮框
1Android 11 截图操作优化的基本思路

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

Step 1. 监测截图弹窗

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

1

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

1

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

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

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

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

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

Step 2. ​做一个截图通知

搭建通知框架​

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

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

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

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

  • Category 1 设定一个名字,后续可以在 Android 系统通知中单独针对这个通知进行管理
  • 根据之前厘清的 特征一 ,在操作的栏目中加入两个项目,标签分别名为「 删除 」和「 保留
  • 上述项目中的具体操作我们暂时保留不动
1「警报 > 通知」的基本设定

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

1再看一遍示意图 | 图:Clyde

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

  • 删除: 找到截图文件夹中的最新截图 > 删除截图 > 清除这条通知
  • 保留: 不对截图进行任何操作 > 清除这条通知
1通知按钮的设计思路

配置「删除」按钮​

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

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

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

1%file 数组解释

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

1

配置通知自动清除

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

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

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

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

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

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

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

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

Step 3. 模块细节优化

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

  • 删除后没有感觉,不确定截图是否被删除
  • 原有的浮窗需要手动点击关闭,或等待 5s 后才可以关闭,因此会存在图片已经删除,但浮窗仍存在的尴尬情况

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

监测截图删除结果

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

1监测流程示意

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

1对删除任务进行改进

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

1新增提示通知

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

1添加一点合适的等待时间

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

1添加通知取消步骤

自动关闭浮窗

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

大致的流程如下图所示:

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

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

​X = 633,Y = 742​
​X = 265,Y = 1779​
1获取点击位置的坐标

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

1配置竖屏点击位置

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

1配置屏幕方向位置

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

1配置横屏

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

1设置横竖屏判断

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

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

1优化完成

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

bcf3d871b20021e64eccdd9b483a7344.gif效果展示

小结

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

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

致谢:

  • 感谢@yzlnew  的相关指导
  • 感谢@Clyde  提供的替代思路(详情见评论区)

注:本文作者实现环境,Pixel 5 已 Root,系统版本 Android 11,Tasker 为 Google Play 版本。

关联阅读:

> 下载少数派客户端、关注少数派公众号,了解更妙的数字生活 :leaves:

> 想申请成为少数派作者?冲!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK