Tasker笔记

一、Tasker 概述

Tasker 是一款运行在 Android 系统上的强大自动化辅助应用。它通过 配置文件(Profiles) 设置触发条件,并执行对应的 任务(Tasks),实现各种自动化操作。

  • 触发器类型:程序、时间、日期、位置、硬件/软件状态、事件、快捷方式、桌面小工具、计时器

  • 任务组成:一系列操作(Actions),支持循环、变量、条件判断(If)

  • 特性

    • 无需 Root 权限即可使用大部分功能(部分底层操作需要 Root)

    • 支持第三方插件(如 AutoVoice、AutoInput)

    • 无需编程基础

  • 桌面插件:提供 "Clickable" 或定时任务的桌面小工具(Widget),可直接调用任务


二、核心概念(术语解读)

术语 说明
配置文件(Profiles) Tasker 的核心,由 背景(Contexts) 和对应的 任务(Tasks) 组成。当所有背景条件满足时,自动执行任务。
背景(Contexts) 任务执行的前提条件,可以是事件、状态、时间、位置等。只有条件满足时,任务才会触发。
任务(Tasks) 由多个 操作(Actions) 构成的执行单元。"操作"(Actions)是Tasker里的最小动作。
操作(Actions) Tasker 中的最小动作单元,例如拍照、发送 HTTP 请求、变量赋值等。
插件(Widget) Tasker 提供的桌面小工具,可直接调用指定任务,无需满足背景条件。

三、常用扩展插件

插件 功能
AutoVoice 使用自定义语音命令控制手机
AutoInput 自动输入文本,并获取其他应用的界面信息
AutoCast 控制 Chromecast 设备

插件可在 Google Play 或 Tasker 官网下载安装。插件中的变量可与 Tasker 变量共用。如需后台使用插件,需开启自动唤醒、锁定近期任务、关闭电池优化、授予相关权限。


四、基本使用流程

  1. 创建配置文件(Profiles) 选择一个触发条件(例如:事件 → 电话 → 未接来电)

  2. 创建任务(Tasks) 配置文件创建后,Tasker 会要求立即关联一个任务(不能没有任务)

  3. 添加操作(Actions) 在任务中添加具体操作(例如:媒体 → 拍照)

  4. 保存 任务变更后需手动点击返回栏的 确认,否则不生效

  5. 执行 当触发条件满足时,任务按添加顺序依次执行

注意事项

1、多数操作需要tasker获取操作权限,这个需要注意

2、小米手机、坚果手机使用tasker可能会出现异常。华为手机使用效果比较好

3、虽然说tasker使用不需要root功能,但是设计底层的操作,也需要手机root,请谨慎使用

4、【任务】中有变更,需要返回任务栏点击√确认,否则不生效

5、【任务】中可以同时添加多个任务,会按照顺序依次执行

6、如果有配置文件引用该任务,则该任务无法删除,需要在配置文件中取消任务连接才可以正常删除

7、【变量】例如获取未接来电的信息,则系统有给出的%evtprm1

tasker内部定义了许多的变量,我们可以直接使用。 同时我们也可以自己设置变量,用来存储或者存储转换后的信息
变量的命名规则是:%变量名称,如%code,%CODE 注意:如果%后跟的是小写的字母,那么该变量只可以在该事件或者任务中使用。 如果%后跟的是大写的字母,那么该变量可以被认为是全局变量。


五、配置文件(触发条件)详解

1. 事件(Events)

最常用的触发器,瞬间发生。包括:

  • 电话:手机振铃、挂机、未接来电、收到短信等

  • 传感器:手势(利用加速度/陀螺仪记录运动轨迹)

  • 变量:变量值变更

  • 媒体:音乐曲目变更

  • 文件:文件属性变动、被修改、被删除、被打开、被移动

  • 系统:收到 Intent(可接收系统全局 Intent,extra 数据可直接作为变量使用)

2. 状态(States)

持续性条件,如:

  • 网络连接状态

  • 应用程序运行中

  • 电量状态

3. 时间 / 日期

  • 时间:用于定时任务(例如每天 8:00 执行)

  • 某天:特定日期的定时任务

4. 位置(Location)

  • 进入或离开某个地理区域时触发(例如到家自动连 WiFi)

5. 应用程序(Application)

  • 指定应用打开或关闭时触发(需授予获取应用使用情况权限)

六、任务(Tasks)中的常用操作

1. 代码类

  • Java 函数

    • 选择类或对象 → 选择成员函数

    • 有参数时需先创建传入对象

    • 返回值名称避免与 Tasker 内部变量冲突(建议小写开头驼峰命名)

    • 无需声明变量类型,直接传递即可;调用构造函数需使用 new

  • 运行 Shell 命令 示例:提取短信中的验证码

    java 复制代码
    echo "%SMSRB" | grep -iE "码|碼|code"

    将输出存储到变量 %MESSAGE_CODE,错误存储到 %ERROR_CODE

2. 网络请求

  • HTTP Request

    • Method:GET / POST

    • URL:例如 https://www.baidu.com/s?wd=天气

    • SSL:HTTPS 需勾选

    • Output:保存到变量(如 %weatherResult

    • 返回数据保存在 %http_file_output,响应头保存在 %http_headers() 数组

3. 变量操作

  • 变量值增加 / 减少 / 随机化

  • 变量截取、合并、拆分、搜索替换

  • 数组操作(出栈等)

4. 媒体与显示

  • 拍照拍照

  • DPI 密度调整(调整屏幕分辨率,新手谨慎操作,错误设置可能导致无法开机)

5. 场景(Scenes)

  • 用于创建自定义 UI 界面,并在界面中调用任务

  • 注意:显示场景为图层时,务必勾选"显示退出按钮",否则 UI 会遮挡整个屏幕,只能重启手机


七、变量详解

命名规则

类型 格式 示例 作用域
局部变量 % + 全小写字母 %code, %message 仅当前任务或事件内
全局变量 % + 大写字母开头(至少 3 个字符) %CODE, %WEATHER_DATA 所有任务、配置文件共享
数组变量 %变量名 + 数字(从 1 开始) %VAR1, %VAR2 按索引访问

内部预定义变量(部分)

  • %SMSRB:收到的短信文本内容

  • %evtprm1:事件参数,例如未接来电的号码

  • %TIME:当前时间

更多内部变量请参考 Tasker 软件内的"帮助"或"变量"页面。


八、实用示例

示例 1:获取短信中的验证码并发送到服务器

前提
  • 服务器端部署了一个 Java jar 包,提供两个接口:

    • /toTasker?token=xxx:接收验证码信息

    • /getCode:返回解析好的 4 或 6 位验证码

服务器端代码(Spring Boot)
java 复制代码
@RestController
public class CodeController {
    private static String code;
​
    @GetMapping("/toTasker")
    public String toTasker(String token) {
        code = vCode.vcode(token);  // 假设 vCode.vcode 解析验证码
        System.out.println(code);
        return "success";
    }
​
    @GetMapping("/getCode")
    public String getCode() {
        return code;
    }
}
Tasker 配置步骤
  1. 配置文件:事件 → 电话 → 收到短信(任意短信)

  2. 任务:新建任务,依次添加以下操作:

    • 运行 Shell 命令

      java 复制代码
      echo "%SMSRB" | grep -iE "码|碼|code"

      输出存储到 %MESSAGE_CODE

    • 变量 → 变量搜索替换

      • 源变量:%MESSAGE_CODE

      • 搜索正则:\d{4}|\d{6}(匹配 4 或 6 位数字)

      • 将匹配存储到 %CODE

    • 网络 → HTTP Request

      • Method:GET

      • URL:http://你的服务器IP:8080/toTasker?tasker=%CODE

注意:手机管家类应用可能会拦截验证码,需关闭"验证码安全保护"功能,否则 Tasker 无法读取短信内容。


示例 2:监控 Gitee 仓库变更

步骤
  1. Gitee Webhook 设置

    • 仓库 → 管理 → WebHooks → 添加

    • URL:https://你的后端服务/gitee/webhook

    • 事件类型:Push

  2. Java 后端服务(Spring Boot)

    • 创建 GiteeWebhookPayload 类映射 JSON 数据(包含 head_commit, commits, pusher, repository 等)

    • 编写 Controller 接收 POST 请求:

      java 复制代码
      @PostMapping("/gitee/webhook")
      public ResponseEntity<String> handleWebhook(@RequestBody GiteeWebhookPayload payload) {
          System.out.println("Received ref: " + payload.getRef());
          return ResponseEntity.ok("OK");
      }
      import java.util.List;
      // 用于映射Gitee Webhook推送的JSON数据结构的类 GiteeWebhookPayload
      public class GiteeWebhookPayload {
          private String head_commit;
          private String before;
          private String after;
          private String ref;
          private String master_branch;
          private String repository;
          private String commits_count;
          private List<Commit> commits;
          private Pusher pusher;
          private Repository repository_info;
          private String total_commits_count;
          private String event_type_name;
      ​
          // getters and setters...
          public static class Commit {
              private String id;
              private String message;
              private String timestamp;
              private String url;
              private String author_name;
              private String author_email;
      ​
              // getters and setters...
          }
      ​
          public static class Pusher {
              private String id;
              private String username;
              private String email;
              private String name;
      ​
              // getters and setters...
          }
      ​
          public static class Repository {
              private String id;
              private String name;
              private String description;
              private String homepage;
              private String git_http_url;
              private String git_ssh_url;
              private String url;
      ​
              // getters and setters...
          }
      }
      // Controller层的内容
      import org.springframework.web.bind.annotation.PostMapping;
      import org.springframework.web.bind.annotation.RequestBody;
      import org.springframework.web.bind.annotation.RestController;
      import org.springframework.http.ResponseEntity;
      ​
      @RestController
      public class GiteeWebhookController {
      ​
          @PostMapping("/gitee/webhook")
          public ResponseEntity<String> handleGiteeWebhook(@RequestBody GiteeWebhookPayload payload) {
              // 处理Webhook数据的逻辑
              System.out.println("Received Gitee webhook with ref: " + payload.getRef());
              // 这里可以添加代码来处理payload,例如触发CI/CD流程
              // 返回响应
              return ResponseEntity.ok("Webhook received successfully");
          }
      }
  3. Tasker 中的配置

    • 配置文件:状态 → 以太网连接(或使用"时间"定期触发)

    • 任务:网络 → HTTP Request → 请求你的后端服务 URL

确保后端服务支持 HTTPS(因为 Gitee 使用 HTTPS 发送 Webhook),且设备网络稳定。


示例 3:转发短信到微信

参考链接:https://taskerm.com/2020/03/05/forwarded-sms-to-wechat-by-tasker (利用 HTTP Request 调用微信的企业微信机器人或第三方推送服务)


示例 4:按需开启 GPS

  • 场景:打开百度地图、高德地图时才开启 GPS,其他时候关闭 → 省电、保护隐私

  • 实现:配置文件 → 应用程序 → 选择地图应用 → 进入任务开启 GPS,退出任务关闭 GPS

示例 5:到家自动连 WiFi

  • 配置文件 → 位置 → 设定家附近的地理围栏 → 任务 → 网络 → 连接 WiFi

示例 6:来电时增大音量

  • 配置文件 → 事件 → 电话 → 手机振铃 → 任务 → 媒体 → 媒体音量(调大)

九、HTTP 请求注意事项

  • 确保 Tasker 拥有网络访问权限

  • VPN 或代理可能阻止 Tasker 的网络请求

  • 对于 JavaScript 渲染的页面(如百度搜索结果),直接 HTTP GET 可能无法获取完整内容,需使用浏览器自动化工具

  • 请求天气 JSON 示例: http://t.weather.sojson.com/api/weather/city/101030100


十、注意事项与兼容性

事项 说明
手动保存 任务或配置文件修改后,必须点击返回栏的 ✓ 确认,否则不生效
删除任务 如果有配置文件引用了该任务,则无法直接删除,需先解除引用
权限 多数操作需要授予相应权限(如读取短信、位置、网络等)
Root 需求 普通自动化不需要 Root,但底层操作(如修改系统文件、某些 Shell 命令)需要 Root
手机兼容性 小米、坚果手机可能出现异常;华为手机效果较好
DPI 调整 新手谨慎使用,错误的 DPI 可能导致手机无法开机
场景退出按钮 显示场景为图层时,必须勾选"显示退出按钮",否则会遮挡屏幕无法操作

十一、总结

Tasker 是一款功能极其强大的 Android 自动化工具,通过"条件 → 动作"的模式,可以实现从简单定时任务到复杂交互(如验证码自动处理、仓库监控)的各种自动化。熟练掌握配置文件、任务操作、变量和插件,可以极大地提升手机使用效率。

相关推荐
Mr_CrazyPeter1 天前
iONSPlayer 1.1.1版本发布
游戏·ios·模拟器
秋雨梧桐叶落莳1 天前
iOS——UI入门
ui·ios·cocoa
zhensherlock1 天前
Protocol Launcher 系列:Agenda 优雅组织你的想法与日程
javascript·macos·ios·typescript·node.js·mac·ipad
Rhys..1 天前
webdriveragent setup教程
ios
报错小能手1 天前
ios开发方向——swift内存基础
开发语言·ios·swift
SY.ZHOU1 天前
移动端架构体系(二):本地持久化与动态部署
flutter·ios·安卓
Mr_Tony1 天前
iOS / SwiftUI 输入法(键盘)布局处理总结(AI版)
ios·swiftui
zhensherlock2 天前
Protocol Launcher 系列:1Writer iOS 上的 Markdown 文档管理
javascript·笔记·ios·typescript·node.js·iphone·ipad
ˇasushiro2 天前
终端工具配置
开发语言·ios·swift
CDN3602 天前
iOS/Android 集成游戏盾审核被拒?权限与合规配置修复
android·游戏·ios