草庐IT

安卓自动化APP——Tasker

岁月无疆 2023-07-10 原文

文章目录

前言

本文介绍另一款安卓手机自动化软件,名为Tasker。与之前介绍的一款自动化软件原理相似。如需要,请参考我的这篇文章——安卓自动化APP——Macrodroid。Tasker这款软件也是通过触发器>>>任务的原理实现自动化的。但这款软件相较Macrodroid更底层一些,同时也更难操作,需要的专业知识更多。

一、软件介绍

软件特色

  1. 支持自定义简单的场景,类似APP的一个页面一样。
  2. 支持shell脚本,JAVA函数、JavaScript脚本和SL4A脚本。
  3. 支持其他软件快捷方式调用。
  4. 可以制作摩尔斯电码。
  5. 支持简单的图片处理,和压缩、解压、SQL数据库读取基本操作。
  6. 支持Tasker插件和第三方插件。
  7. 不必提前声明变量,在任务中定义变量会在变量中自动出现。
  8. 变量支持Json、HTML/XML、CSV格式。
  9. 支持CPU调控。
  10. 支持复杂的手势操作。
  11. 可以和Macrodroid嵌套使用。

使用逻辑

  • 通过在配置文件中添加触发器,然后指定触发器要执行的任务。并且通过局部变量、全局变量传递各任务、场景之间的数据。如果需要条件限制可以在任务中配置 If 条件即可。

注意事项

  • 若需要任务保持后台运行,需要在手机中打开自启动、关闭电池优化、锁定近期任务(各品牌手机可能有所差异)。
  • 各功能需要足够权限,请在主界面右上角选择更多>>Android 设置中依次点击各权限允许即可。(无障碍可能会在软件结束运行后失效,需要重新授权!新版本Tasker支持无障碍保活。)
  • 注意保存提交, 编辑完任务后要记得在主界面点击上方的 按钮提交或按手机返回键 (不是home键) 提交保存才能生效。

二、使用教程

配置文件(介绍几个难以理解的,下同)

包括事件、位置、应用程序、时间、状态这几类。其实都可以看做同一种——满足某种触发条件。选择好配置文件后按照软件提示选择或者新建一个任务,然后继续查看本文之后的任务一节。

图1 配置文件示意图
  1. 事件>>>传感器>>>手势

在名称中填入手势名称后,长按音量键开始记录手势。此事件利用手机的加速度传感器、陀螺仪传感器等,记录手机在空间中X、Y、 Z、三个轴的相对方向和位置,形成运动轨迹,当手机再次识别到类似的轨迹后触发动作。

图2 手势编辑示意图
  1. 事件>>>系统>>>剪贴板已改变
    在Android 10系统后剪贴板后台读取权限已被官方限制(后台写入权限不受限制),并且在手机息屏状态下,剪贴板也不能不能读写。 忽略Tasker设置可以过滤掉Tasker自身对剪贴板的修改。
  2. 事件>>>系统>>>Logcat 入口
    此功能需要ROOT权限,利用安卓手机的adb logcat功能抓取手机日志作为触发器,利用此功能可以获取系统中绝大部分事件进行触发,包括intent,指纹,通知等。
  3. 事件>>>系统>>>收到的意图
    此功能为Android系统组件中的Intent组件,用于接收系统全局Intent。在收到的ntent extra 数据后可以在变量中直接使用extra中的Key作为变量名,Value作为变量值。

任务

  1. 代码>>>JAVA函数
    代码编辑功能算是Tasker这款软件中最强大的地方。支持原生的JAVA函数、Android API,JS脚本以及shell命令。由于其中涉及的知识已经超出本文介绍的范畴,故只介绍下使用注意事项:
    ①. 调用函数的时候需要现在类或对象中选择一个类,并在功能中调用类或对象的成员函数。有参数的函数需要在调用函数之前创建传参的对象。
    ②. 返回值的名称不能与Tasker内部变量冲突,建议返回值的名称以小写开头并用驼峰命名或下划线命名等方式加以区别。
    ③. Tasker中不用声明变量和实例化对象的类型,直接在返回值后传递即可。但需要调用构造函数的类需要先new后在返回值中使用成员函数。

举个栗子:Android API中新建文件的Java代码如下:
(为了更直观地与Tasker对比,没有采用链式调用的写法)

// 获取外置存储根目录
File rawPath = Environment.getExternalStorageDirectory();
// 把目录转换为String类型,因为 File() 方法的两个参数的类型为String
String filePath = rawPath.toString();
String fileName = "FileName";
// 新建一个文件
File rawFile = new File(filePath, fileName);
// 用文件输出流把文件写入目录
OutputStream newFile = new FileOutputStream(rawFile);

在Tasker中对应的操作如下(点击查看原图):

图 3-1 整体任务流程示意图图 3-2 第三步任务示意图

由上图对比可见,在Java代码中变量名对应图 3-1 中的等号左边和图 3-2 中的返回值。而代码中的变量类型则在选择图 3-2 中参数类型时由Tasker自动判断。

  1. 代码>>>运行shell命令
    安卓自动化APP——Macrodroid这篇文章中的第9条——shell命令,使用方法相同。
  2. 变量
    全局变量必须以 %+大写英文字母开头且大于三个字符,局部变量全为小写,并且要与Tasker内部变量区分开,Tasker内部变量参考软件内操作指南。Tasker中有数组变量,即在%变量名后加数字,数组序列从1开始。如%VAR1%VAR2等。
  3. 场景
    场景用于创界自定义UI界面,并在界面中调用相关任务。需要注意的是显示场景为图层的时候一定要注意注意勾选显示退出按钮,不然UI界面会遮挡整个手机屏幕只能重启手机才能退出。
  4. 插件
    插件功能可以挂载第三方Tasker相关插件。可以在Google Play商店中下载安装。或直接在Tasker官网安装使用。插件中的变量规则可以与Tasker中的变量共用。需要注意的是:如果需要后台使用插件的功能,需要同时打开插件的自动唤醒、锁定近期任务、关闭电池优化、允许权限等相关操作,否则无法正常使用。
  5. 显示>>>DPI密度调整
    调整屏幕分辨率。新手谨慎操作,错误的DPI可能会导致手机无法开机。

场景

场景用于创建自定义UI,可以在UI中调用任务。场景编辑器有两种模式——界面编辑模式和元素编辑模式。新建好场景后要调出场景请在任务编辑中新建一个任务,选择场景>>>显示场景,关闭场景请用隐藏场景(请注意区分删除场景哦,删除场景会直接删除刚创建好的场景界面哦!)

图4 场景编辑示意图

  • 填写完场景名称后立即进入的是 场景编辑模式,用来编辑场景的类型、显示方向、分辨率和背景色等。屏幕中央的矩形为图形UI的大小,拖动矩形四角以改变大小。点击右上角的 图标编辑属性。点击左下角的图标撤销上一步,点击🔍图标切换到元素编辑模式
  • 进入元素编辑模式后,点击🤚更改触摸模式,以便在手指触摸不到的地方操作。点击+图标或长按空白区域以添加元素,点击AZ图标选择场景元素。长按元素呼出元素菜单。
  • 元素响应的动作有按下、长按、改变、滑动等。不同元素拥有的响应动作不同。在动作中可添加任务,原理和正常任务相同。
  • 元素编辑模式中有图层概念,即元素深度。如果元素不能点击,请检查元素是否被遮挡,如果遮挡,将上层元素深度数值减小即可。

备份功能

  • Tasker支持在线备份和本地备份,在线备份使用Google Drive,国内不好使用,可以用本地备份。备份在右上角依次点击 图标>>>数据>>>备份,然后选择备份目录后重命名(可选)并按返回键提示备份成功后即可完成备份。建议备份在存储根目录,不然卸载软件后可能会丢失备份。还原备份请选择存储中的.xml后缀文件后按返回键即可。请注意恢复备份会覆盖之前所有任务!若要恢复部分请多选任务后点击右上角导出按钮后选择作为XML保存到存储,或长按底部🏠按钮,然后点击添加+,这时会新建一个新项目,可以进行任务分类,长按项目进行导入导出。

写在最后

由于软件功能强大,操作步骤较多,限于篇幅,更多细节请参考Tasker官方英文手册。(只有英文版才有最全的说明哦,更新也是最频繁的)

如对官方手册中或本文中有什么不明白的操作或有什么需要我详细介绍的请留言或私信,我看到后都会一一回复。(请不要忘了查看回复内容哦,我时长在线)

有关安卓自动化APP——Tasker的更多相关文章

  1. ruby-on-rails - 使用 Ruby on Rails 进行自动化测试 - 最佳实践 - 2

    很好奇,就使用ruby​​onrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提

  2. ruby - RuntimeError(自动加载常量 Apps 多线程时检测到循环依赖 - 2

    我收到这个错误:RuntimeError(自动加载常量Apps时检测到循环依赖当我使用多线程时。下面是我的代码。为什么会这样?我尝试多线程的原因是因为我正在编写一个HTML抓取应用程序。对Nokogiri::HTML(open())的调用是一个同步阻塞调用,需要1秒才能返回,我有100,000多个页面要访问,所以我试图运行多个线程来解决这个问题。有更好的方法吗?classToolsController0)app.website=array.join(',')putsapp.websiteelseapp.website="NONE"endapp.saveapps=Apps.order("

  3. ruby-on-rails - 每次我尝试部署时,我都会得到 - (gcloud.preview.app.deploy) 错误响应 : [4] DEADLINE_EXCEEDED - 2

    我是Google云的新手,我正在尝试对其进行首次部署。我的第一个部署是RubyonRails项目。我基本上是在关注thisguideinthegoogleclouddocumentation.唯一的区别是我使用的是我自己的项目,而不是他们提供的“helloworld”项目。这是我的app.yaml文件runtime:customvm:trueentrypoint:bundleexecrackup-p8080-Eproductionconfig.ruresources:cpu:0.5memory_gb:1.3disk_size_gb:10当我转到我的项目目录并运行gcloudprevie

  4. ruby-on-rails - 如何重命名或移动 Rails 的 README_FOR_APP - 2

    当我在我的Rails应用程序根目录中运行rakedoc:app时,API文档是使用/doc/README_FOR_APP作为主页生成的。我想向该文件添加.rdoc扩展名,以便它在GitHub上正确呈现。更好的是,我想将它移动到应用程序根目录(/README.rdoc)。有没有办法通过修改包含的rake/rdoctask任务在我的Rakefile中执行此操作?是否有某个地方可以查找可以修改的主页文件的名称?还是我必须编写一个新的Rake任务?额外的问题:Rails应用程序的两个单独文件/README和/doc/README_FOR_APP背后的逻辑是什么?为什么不只有一个?

  5. ruby-on-rails - 从应用程序中自定义文件夹内的命名空间自动加载 - 2

    我们目前正在为ROR3.2开发自定义cms引擎。在这个过程中,我们希望成为我们的rails应用程序中的一等公民的几个类类型起源,这意味着它们应该驻留在应用程序的app文件夹下,它是插件。目前我们有以下类型:数据源数据类型查看我在app文件夹下创建了多个目录来保存这些:应用/数据源应用/数据类型应用/View更多类型将随之而来,我有点担心应用程序文件夹被这么多目录污染。因此,我想将它们移动到一个子目录/模块中,该子目录/模块包含cms定义的所有类型。所有类都应位于MyCms命名空间内,目录布局应如下所示:应用程序/my_cms/data_source应用程序/my_cms/data_ty

  6. ruby - 使用 postgres.app 在 rvm 下要求 pg 时出错 - 2

    我正在使用Postgres.app在OSX(10.8.3)上。我已经修改了我的PATH,以便应用程序的bin文件夹位于所有其他文件夹之前。Rammy:~phrogz$whichpg_config/Applications/Postgres.app/Contents/MacOS/bin/pg_config我已经安装了rvm并且可以毫无错误地安装pggem,但是当我需要它时我得到一个错误:Rammy:~phrogz$gem-v1.8.25Rammy:~phrogz$geminstallpgFetching:pg-0.15.1.gem(100%)Buildingnativeextension

  7. 安卓apk修改(Android反编译apk) - 2

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步:反编译解包,修改,重打包,修改签名等步骤。安卓apk修改准备工作1.系统配置好JavaJDK环境变量2.需要root权限的手机(针对系统自带apk,其他软件免root)3.Auto-Sign签名工具4.apktool工具安卓apk修改开始反编译本文拿Android系统里面的Settings.apk做demo,具体如何将apk获取出来在此就不过多介绍了,直接进入主题:按键win+R输入cmd,打开命令窗口,并将路

  8. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  9. ruby - 在 ruby​​ 中使用自动创建插入数组 - 2

    我想知道是否可以通过自动创建数组来插入数组,如果数组不存在的话,就像在PHP中一样:$toto[]='titi';如果尚未定义$toto,它将创建数组并将“titi”压入。如果已经存在,它只会推送。在Ruby中我必须这样做:toto||=[]toto.push('titi')可以一行完成吗?因为如果我有一个循环,它会测试“||=”,除了第一次:Person.all.eachdo|person|toto||=[]#with1billionofperson,thislineisuseless999999999times...toto.push(person.name)你有更好的解决方案吗?

  10. ruby - 为 capybara 设置 app_host 的内容 - 2

    我的测试尝试访问网页并验证页面上是否存在某些元素。例如,它访问http://foo.com/homepage.html并检查Logo图像,然后访问http://bar.com/store/blah.html并检查页面上是否出现了某些文本。我的目标是访问经过Kerberos身份验证的网页。我发现Kerberos代码如下:主文件uri=URI.parse(Capybara.app_host)kerberos=Kerberos.new(uri.host)@kerberos_token=kerberos.encoded_tokenkerberos.rb文件classKerberosdefini

随机推荐