作为 Android 平台上久负盛名的老牌自动化工具,Tasker 去年 3 月经 JoinAutoApps 开发者 @joaomgcd 接手后再次焕发出生机,Android 10 正式版推出后不久,Tasker 便在 v5.8.5 更新中加入了对暗色主题相关动作的支持。

因此借助最新版本的 Tasker,我们可以让原本有些简陋的 Android 10 暗色主题变得更加实用,比如:

  • 根据日落/日出时间自动开/关暗色主题->Google 今年放不下身段学习 iOS,我们自己动手就好
  • 将夜间/护眼模式与暗色主题关联->达到双重护眼效果
  • 根据环境光亮度自动切换暗色主题->这个 iOS 真就做不到了

感兴趣吗?拿出你的手机,哪怕没有 root 也可以,跟着我一步一步动手试试,也许你会有新的收获。

关于 Tasker 的介绍与使用方法,可以参考 Power+ 的这篇文章:Tasker:Android 上的自动化标杆

理解 Tasker 的工作原理

鉴于这是一篇希望能够让从未接触过 Tasker 的用户也能动手做的文章,在进入具体的实操环节前,我们必须先介绍以下 Tasker 这款应用的工作原理。

正如开头所讲,Tasker 是一款自动化工具,它的基本工作流程是根据一定的条件执行特定的任务。比如 每天晚上七点打开电视看新闻联播 这件事,用 Tasker 的模式类比过来就是:

  • 条件一:你有一台电视
  • 条件二:每天晚上七点
  • 执行任务:同时满足上述两个条件时,电视机切换到新闻联播
对需求进行条件与任务的拆解

所以这篇文章想要实现的几个功能也可以用类似的思路进行拆解,比如当 条件夜间/护眼模式开启 时执行 任务:开启暗色主题。所有目标场景都是围绕这一基本思路进行配置和搭建的。

从最简单的入手

打开 Tasker,我们可以看到主界面标题栏下方分布着这样几个功能标签:配置文件、任务、场景和变量,在本文的具体语境下,配置文件可以看作是各种条件与任务的集合,任务即暗色主题的开/关,变量在条件与任务相互关联的过程中起到桥梁般的嫁接作用。与用户界面、自建应用和交互窗口相关的场景我们可以暂时不管。

Tasker 主界面

我们不妨先借助一个最简单的实例来练练手:每天晚上 8:00 自动开启暗色主题。这个简单的自动化配置能够让手机在晚上自动开启暗色主题,免去手动开关的麻烦,在一定程度上弥补了原生 Android 10 暗色主题缺少自动化体验的不足。

那这个自动化配置该如何使用 Tasker 制作呢?

首先,我们在配置文件界面点击右下角的添加按钮新建一个名为「定时暗色主题」的配置文件(当然名字可以随便起),命名完成后在弹出的窗口里选择 时间 这一触发条件。

新建配置文件

根据我们的需求,这里将开始时间设置为 从 下午 8:00,无需设置重复和截止时间。设置好后按一次返回回到配置文件界面,此时暗色主题配置文件右侧会弹出任务选择窗口,这里我们选择新建任务,并将新建的任务命名为「暗色主题 - 开」。

为配置文件关联新任务

然后我们就进入了任务编辑界面。点击编辑界面右下角的添加按钮选择要执行的任务,这里我们可以在 显示 类别下找到 Dark Mode,也可以直接通过选择器底部的搜索框进行查找。

新建暗色主题任务

这里需要注意的是,虽然整个操作不需要 root 权限,但暗色主题的相关设置需要授予 Tasker 额外的权限才能正常操作。授予方法如下:

  • 手机端开启 USB 调试,连接电脑

  • 电脑端

    • macOS:在终端中键入并执行 ./adb shell pm grant net.dinglisch.android.taskerm android.permission.WRITE_SECURE_SETTINGS
    • Windows:在命令行窗口键入并执行 adb shell pm grant net.dinglisch.android.taskerm android.permission.WRITE_SECURE_SETTINGS
    • 期间注意手机端可能会弹出的授权窗口

授予权限并选择 Dark Mode 后,我们随即便进入了这一操作的操作修改界面。因为我们需要实现的是在晚上八点开启暗色主题这一效果,因此这里将 设置 的参数改为 ,然后按两次返回回到配置文件主界面。

配置完成

此时一个简单的 Tasker 夜间/护眼模式规则就已经制作完成,配置文件启用后1 ,Tasker 就会在晚上 8 点自动为我们开启暗色主题了。

如果你想立马试试效果,也可以将触发事件修改为当前时间的几分钟后。

掌握进阶用法

有了上面的经验,接下来要做的配置文件应该就简单很多了。

在设置定时暗色主题这个配置文件的过程中你可能已经发现了,Dark Mode 这一任务操作除了 还有 触发 选项。把这些任务操作和时间条件合理搭配,暗色主题的开启和关闭就可以变得更加灵活。

比如我们参照上面的流程将触发时间设置为 从下午 8:00 到 上午 8:00,同时长按右侧的任务区域添加一个用于关闭暗色主题的退出任务。如此一来,系统就会在晚上 8:00 自动启用暗色主题,然后在第二天早上 8:00 自动关闭。

配置思路
通过退出任务让配置文件有始有终

以上面这个特定时间段内启用暗色主题的规则为蓝本,我们就可以进一步实现文章开头提到的根据夜间/护眼模式2 自动开启暗色主题这个需求了——这两套配置文件的唯一区别在于触发条件不同,前者的触发条件为时间段,后者的触发时间为夜间/护眼模式的状态。

所以制作思路也很简单,添加一个新的配置文件,然后依次选择 状态->系统->自定义设置,这里我们便来到了夜间/护眼模式状态的条件设置界面。

新建配置文件

很多刚接触 Tasker 的用户此时应该就要开始打退堂鼓了:这里的类型、名称和数值是什么,我该如何填写?

别怕,一点都不难。我们不妨将系统中的每一项功能都编个号,比如夜间/护眼模式的名称是 A,那么夜间/护眼模式开启时 A 的数值可能就会从 0 变成 1,所以我们要做的就是找到夜间/护眼模式的名称和状态变化时对应的数值变化情况。

这里你可能还会纳闷:

你自己在上面的注释里也说了,夜间/护眼在不同设备上的名称可能有差异,我一个毫无反编译基础的普通用户怎么猜厂商们的具体命名呢?

直接点击名称一栏中的放大镜图标,此时 Tasker 会弹出一个名为「选择设置」的对话框,在最新版本中这一对话框并没有完全本地化,但它的大致意思是询问我们是否要从系统的功能列表中进行选择或让 Tasker 自动查找我们想要的设置对应的名称和数值变化。

当然是让 Tasker 来了。

让 Tasker 自动捕捉护眼模式的字符串

点击查找,然后在快速设置面板中一键开启系统内置的夜间/护眼模式,此时再次点击名称中的放大镜图标,Tasker 已经成功地捕获到了我们所需要的信息,选择看上去像是夜间/护眼模式的字符串(比如下图中 MIUI 11 中这一功能开启时名称为 screen_paper_mode_enabled 的字符串数值从 0 变成了 1),Tasker 就能自动完成这一界面中所有区域的参数填写,我们只需按一下返回回到配置修改界面就好。

配置完成后的状态

接下来的操作你应该很熟悉了,回到配置修改界面后,Tasker 会自动弹出要执行的任务选框供我们选择——值得一提的是,此前我们在其它配置文件中用过的任务是可以复用的,因此我们这里直接选择进入任务为夜间模式开启、退出任务为夜间模式关闭,一个关联了夜间模式和暗色主题的双重护眼自动规则就配置好了。

尝试高级用法

恭喜,在尝试了上述足以满足日常暗色主题需求的自动化配置之后你仍然决定读下去。那接下来我们要讲些什么?

对,开头提到的根据日落/日出时间自动开启/关闭暗色主题的方案还没介绍。

这是我们的终极目标,但现在还不可用

我们先按照前文所介绍的思路新建一个配置文件,名字就叫「更自然的暗色主题」吧,触发条件为时间 从 %A 到 %B,这段时间内对应要执行的任务为 开启暗色主题,日出后的退出任务为 关闭暗色主题

这里涉及到三个问题:

  1. 不同地点的日落/日出时间并不固定,%A、%B 更像是两个容器,它们暂时还没有可以当作触发条件的特定数值
  2. 不同时节的日落/日出时间也不固定,借助特定手段获取到日落/日出时间,%A 和 %B 的数值该如何进行更新?

基于上述考虑,我们首先可以确定的是退出任务不应为简单的关闭暗色主题,在此基础上,我们还应该加上一个重复为 %A 和 %B 两个容器赋值的操作——你看,这就是开头讲到的变量。

而针对日落和日出时间的赋值操作,Tasker 在 wikidot 页面上直接提供了一整套现成的用于计算 曙暮光、日落和日出时间配置文件,这套配置文件主要由两部分组成:

我们需要的文件
  • javascript 文件:用于计算时间的核心部件,下载后放进手机存储空间 Tasker/Javascript 目录中
  • profile 配置文件:下载后直接在手机上打开并使用 Tasker 导入

完成上述操作并导入配置文件后,我们会在 Tasker 主界面看到名为 sunriseset 的配置文件和任务,配置文件这里用不上可以长按删除,在任务标签页中找到并点击打开 sunriseset 任务,然后在任务编辑页面底部的工具栏中直接点击运行按钮进行测试。

测试脚本可用性

如果最后你能看到一个带有各种时间弹出窗口,那么日落日出时间的计算问题就算是解决了。此时我们就能将上面的 %A 和 %B 替换为 sunriseset 任务中的变量了——你可能没留意到的是,导入 profile 配置文件的同时,对应配置文件的变量、任务和场景都会一并导入。和上面删除我们这里用不到的配置文件的做法类似,你现在也可以将导入 sunriseset 时引入的场景,以及 sunriseset 任务中的第 6、7、8 个步骤都一一删掉(否则后续会在暗色主题启用时引入弹窗)。

删掉多余的步骤

然后我们前往刚刚建立的「更自然的暗色主题」配置文件页面,将触发条件 从 %A 到 %B 分别改为 sunriseset 引入的带有具体数值的变量 %SUNSET 和 %SUNRISE

换上可用的变量条目

最后要做的就是一些善后工作了,具体而言,「更自然的暗色主题」的退出任务不能只是简单的关闭暗色主题。

为此我们新建一个任务,将其命名为「退出暗色并更新时间」,然后在任务编辑界面中添加并选择 类别->任务->执行任务。这里我们要执行的第一个任务是关闭暗色主题,在执行任务的操作修改界面中,点击名称一栏中的放大镜图标,然后直接选择我们先前制作的「暗色主题 - 关」这一任务即可。点选后其它参数保持不变,按一次返回回到任务编辑页面。

配置更合理的退出任务

接下来我们用同样的方法再添加一个执行「sunriseset」任务的指令,如此一来,「退出暗色并更新时间」的任务就制作完成了。将其设置为「更自然的暗色主题」的退出任务便大功告成了。

真是没想到,最简单的模仿3 竟然是操作最复杂的。

至于文章开头提到的根据环境光亮度自动切换暗色主题模式,掌握了本文所提到的几个实例之后应该就很简单了,大家可以自行挖掘,欢迎在评论区分享你的配置🌚

小结

不难看出,作为 Android 平台上最令人望而生畏的自动化工具之一,Tasker 其实并没有想象中的那么难。理解 Tasker 的工作原理、理顺实际需求的解决思路最后善加利用现有资源,你也可以很快上手并熟练这款神器。

Tasker 售价 3.49 美元,加入 Play Pass 订阅可免费获取。


关联阅读:

> 下载少数派 客户端、关注 少数派公众号 ,多掌握一点 Tasker 技巧 🐱‍🏍

> 特惠、好用的硬件产品,尽在 少数派sspai官方店铺 🛒