Link Search Menu Expand Document (external link)

English | 简体中文 |

情景模式

Table of contents

  1. 0.1. 前言
  2. 0.2. 介绍
  3. 0.3. 新建
  4. 0.4. Fatcs-params
    1. 0.4.1. 应用安装、卸载、更新
    2. 0.4.2. 应用切换
    3. 0.4.3. 任务清理
    4. 0.4.4. Activity Created
    5. 0.4.5. Activity Resumed
    6. 0.4.6. Activity Changed
    7. 0.4.7. 应用停止运行
    8. 0.4.8. 屏幕开关
    9. 0.4.9. 电量变化
    10. 0.4.10. 蓝牙事件
    11. 0.4.11. Wifi状态变化
    12. 0.4.12. 系统启动
    13. 0.4.13. 推送消息
    14. 0.4.14. 通知
    15. 0.5.15 快捷方式
  5. 0.5. Handle
    1. 0.5.1. killer
    2. 0.5.2. activity
    3. 0.5.3. power
    4. 0.5.4. task
    5. 0.5.5. ui
    6. 0.5.6. hw
    7. 0.5.7. io
    8. 0.5.8. data
    9. 0.5.9. ringtone
    10. 0.5.10. sh
    11. 0.5.11. input
    12. 0.5.12. pkg
    13. 0.5.13. Log
    14. 0.5.14. Audio
    15. 0.5.15. Battery
    16. 0.5.16. Context
    17. 0.5.17. Thanos
    18. 0.5.18. Actor(废弃)
  6. 0.6. 全局变量

0.1. 前言

You can build a simple rules engine yourself. All you need is to create a bunch of objects with conditions and actions, store them in a collection, and run through them to evaluate the conditions and execute the actions. Martin Fowler  

0.2. 介绍

情景模式简单理解:

“什么时候,干什么。”

什么时候就是触发条件(condition)

干什么就是动作(actions)

 

 

0.3. 新建

新建一条入门实例如下,以JSON格式为例:

[
  {
    "name": "Current pkg",
    "description": "应用切换时,使用Toast显示当前应用的当前应用包名",
    "priority": 2,
    "delay": 2000,
    "condition": "frontPkgChanged == true",
    "actions": [
      "ui.showShortToast(activity.getFrontAppPackage());"
    ]
  }
]

参数解释:

参数名 含义
name 请使用英文,情景模式名字,多个模式不能重复,否则会被覆盖
description 任意的描述
priority 优先级,决定执行顺序
delay action 动作执行的延迟,时间单位为毫秒
condition 触发条件,支持mvel表达式,条件可选的基于事实的facts-param请参考下面的章节
语法注意:双引号需要使用\转移字符转义
actions 要执行的动作,支持mvel表达式 ,可以设置多个,动作可选的handle请参考下面的章节
语法注意:双引号需要使用\转移字符转义

 

 

0.4. Fatcs-params

除了提供规则引擎之外,Thanox也会提供常用的事实与参数,用于condition条件判断。

 

0.4.1. 应用安装、卸载、更新

应用安装、卸载、更新之后,thanox会发布这个事实,并注入一些参数,你可以使用这些参数做条件判断,或者执行动作时作为参数使用。

参数名 类型 含义 示例
pkgAdded Boolean 新应用已经安装 如下
pkgRemoved Boolean 应用被卸载 如下
pkgUpdated Boolean 应用已更新 如下
pkgName String 安装的应用包名 如下

pkgAdded 示例

  • 作为条件判断:

    "condition":  "pkgAdded == true"
    

pkgName示例

  • 作为条件判断:

    "condition":  "pkgAdded == true && pkgName == \"com.tencent.mm\""
    
  • 作为动作参数:

    "ui.showShortToast(pkgName);"
    

     

0.4.2. 应用切换

前台应用切换时,thanox也会发布这个事实,参数如下。

参数名 类型 含义 示例
frontPkgChanged Boolean(true/false) 前台应用已切换 如下
from String(字符串) 从哪个应用切换的,包名 如下
to String(字符串) 切换到哪个应用,包名

frontPkgChanged示例

  • 作为条件判断:

    "condition":  "frontPkgChanged == true"
    

from示例

  • 作为条件判断,微信是否回到了后台:

    "condition":  "frontPkgChanged == true && from == \"com.tencent.mm\""
    

     

0.4.3. 任务清理

当某个应用的任务被移除时,一般场景为最近任务中,该任务被用户划掉。此时thanox也会发布这个事实,参数如下。

参数名 类型 含义 示例
taskRemoved Boolean(true/false) 任务已移除 如下
pkgName String(字符串) 从哪个应用切换的,包名 如下

taskRemoved示例

  • 作为条件判断:

    "condition":  "taskRemoved == true"
    

pkgName示例:

  • 作为条件判断,微信任务移除时杀死应用:

    "condition":  "taskRemoved == true && pkgName == \"com.tencent.mm\""
    "actions": [
      		"ui.showShortToast(\"正在杀死微信\");",
          "killer.killPackage(pkgName);"
        ]
    

 

0.4.4. Activity Created

通常一个应用的活动页已经创建好,可以称为Activity Created。此时thanox也会发布这个事实,参数如下。 通常一个活动的生命周期为Created(创建好)–>Resumed(显示好,可以交互了)–> Paused(暂停)–> Destroyed(销毁了),需要注意的是,

如果一个活动走到Resumed状态时,被其他活动覆盖,例如被支付宝支付页面覆盖,那么它会走如下生命周期: Resumed–> Paused(被其他活动覆盖)–>Resumed(如果其他活动销毁了,回到了该活动,那么又会恢复到Resumed,而不会再次Create)。

详细的Android活动的生命周期可以参考:https://developer.android.com/guide/components/activities/activity-lifecycle

参数名 类型 含义 示例
activityCreated Boolean(true/false) 活动页已经创建好 如下
componentNameAsString String(字符串) 活动的组件全名,Thanox的显示当前活动复制来的名字就是这个 如下
componentNameAsShortString String(字符串) 活动的组件缩名 如下
componentName ComponentName 活动的组件 如下
pkgName String(字符串) 应用的包名 如下

 

0.4.5. Activity Resumed

通常一个应用的活动页已经显示,可以称为Activity Resumed。此时thanox也会发布这个事实,参数如下。

参数名 类型 含义 示例
activityResumed Boolean(true/false) 活动已经显示 如下
componentNameAsString String(字符串) 活动的组件全名,Thanox的显示当前活动复制来的名字就是这个 如下
componentNameAsShortString String(字符串) 活动的组件缩名 如下
componentName ComponentName 活动的组件 如下
pkgName String(字符串) 应用的包名 如下

通常很多应用启动首页会有一个首页显示广告,有个跳过按钮可以点击,下面是使用该事实实现的广告跳过示例:

[
  {
    "name": "AD Skip",
    "description": "彩云天气广告页面点击跳过",
    "priority": 1,
    "condition": "activityResumed == true && componentNameAsShortString == \"com.nowcasting.activity/.SplashActivity\"",
    "actions": [
      "ui.showShortToast(\"尝试点击跳过...\");",
      "ui.findAndClickViewByText(\"跳过\", \"com.nowcasting.activity/com.nowcasting.activity.SplashActivity\");"
    ]
  }
]
提示:此处条件只判断了彩云天气,可以使用   操作符做多条件判断。此处的ui操作后续会介绍。

 

0.4.6. Activity Changed

当前前台活动(Activity)发生改变时thanox会发布该事件。(Since Thanox(or Pro)-2.5)

参数名 类型 含义 示例
frontActivityChanged Boolean(true/false) 前台Activity改变
fromActivity ComponentName 活动的组件
toActivity ComponentName 活动的组件

ComponentName 是活动组件名称。

例如:com.android.messaging/com.android.messaging.ui.conversationlist.ConversationListActivity

Thanox的开发者设置中,”显示当前Activity”功能也可以显示当前activity的ComponentName。

 

0.4.7. 应用停止运行

应用被杀死或者其他原因停止运行,Thanox会发布该事实。

参数名 类型 含义 示例
pkgKilled Boolean(true/false) 任务已移除 如下
pkgName String(字符串) 应用包名 如下

 

0.4.8. 屏幕开关

参数名 类型 含义 示例
screenOn Boolean(true/false) 亮屏事件
screenOff Boolean(true/false) 灭屏事件
userPresent Boolean(true/false) 解锁事件

 

0.4.9. 电量变化

参数名 类型 含义 示例
batteryChanged Boolean(true/false) 电量发生变化
batteryLevel int 电量
isCharging Boolean(true/false) 是否在充电
isAcCharge Boolean(true/false) 是否为AC
isUsbCharge Boolean(true/false) 是否为USB

 

0.4.10. 蓝牙事件

参数名 类型 含义 示例
btStateChanged Boolean(true/false) 蓝牙开关状态发生变化
btStateOff Boolean(true/false) 蓝牙为关闭状态
btStateTurningOff Boolean(true/false) 蓝牙为正在关闭状态
btStateOn Boolean(true/false) 蓝牙为开启状态
btStateTurningOn Boolean(true/false) 蓝牙为正在开启状态
       
btConnectionStateChanged Boolean(true/false) 蓝牙连接状态发生变化
btConnectionStateConnected Boolean(true/false) 蓝牙为已连接状态
btConnectionStateConnecting Boolean(true/false) 蓝牙为正在连接状态
btConnectionStateDisconnected Boolean(true/false) 蓝牙为断开连接状态
btConnectionStateDisconnecting Boolean(true/false) 蓝牙为正在断开连接状态
       
btBoundedDevices List of BluetoothDevice 绑定的蓝牙设备模型列表
btBoundedDeviceAddresses List of String 绑定的蓝牙设备地址列表
btBoundedDeviceAliasNames List of String 绑定的蓝牙设备Alias列表
btBoundedDeviceBatteryLevel List of Int 绑定的蓝牙设备电量信息列表

提示: Battery level in percents from 0 to 100, or -1 if Bluetooth is disabled, or device is disconnected, or does not have any battery reportingservice, or return value is invalid

示例1:

[
  {
    "name": "BT Connection State",
    "description": "蓝牙连接状态监听,此处监听连接事件,Toast显示所有连接设备,并判断是不是连接的MDR-XB650BT",
    "priority": 2,
    "condition": "btConnectionStateChanged == true && btConnectionStateConnected == true",
    "actions": [
      "ui.showShortToast(\"蓝牙连接连接到新设备了,所有设备名称为:\" + btBoundedDeviceAliasNames);",
      "ui.showShortToast(\"蓝牙连接连接到新设备了,包含MDR-XB650BT设备吗?\" + btBoundedDeviceAliasNames.contains(\"MDR-XB650BT\"));"
    ]
  }
]

示例2:

[
  {
    "name": "BT Connection State Advanced",
    "description": "同蓝牙连接状态监听,只是使用了btBoundedDevices:BluetoothDevice参数",
    "priority": 2,
    "condition": "btConnectionStateChanged == true && btConnectionStateConnected == true",
    "actions": [
      "ui.showShortToast(\"蓝牙连接连接到新设备了,第一个设备名称为:\" + btBoundedDevices.get(0).getAddress());"
    ]
  }
]

 

0.4.11. Wifi状态变化

Wifi状态变化时发出的事件。(Since Thanox 2.5-2)

参数名 类型 含义 示例
wifiStateChanged Boolean(true/false) Wifi状态是否改变
wifiState WifiState 状态

WifiState:

data class WifiState(
  // 是否是开启状态
  val enabled: Boolean, 
  // 状态信息(例如:No network)
  val statusLabel: String?, 
  // SSID(例如:ChinaNet-d2Xq-5G)
  val ssid: String?
)

 

0.4.12. 系统启动

参数名 类型 含义 示例
systemReady Boolean(true/false) 系统启动完成

 

0.4.13. 推送消息

参数名 类型 含义 示例
fcmPushMessageArrived Boolean(true/false) 收到GCM/FCM消息推送
pkgName String(字符串) 应用包名

 

0.4.14. 通知

参数名 类型 含义 示例
notificationAdded Boolean(true/false) 新通知到达
notificationUpdated Boolean(true/false) 通知更新
notificationRemoved Boolean(true/false) 通知移除
pkgName String(字符串) 通知所属应用包名
userId Int 通知app的用户id
notificationTitle String(字符串) 通知标题
notificationContent String(字符串) 通知内容
notification NotificationRecord 通知记录,该模型包含更详细的信息,查看模型定义

示例:

[
  {
    "name": "Notification events",
    "description": "通知事件",
    "priority": 1,
    "condition": "notificationAdded || notificationRemoved || notificationUpdated",
    "actions": [
      "ui.showShortToast(\"通知事件 \" + pkgName + notificationContent);"
    ]
  }
]

 

0.5.15 快捷方式

你可以创建一个有”意义的“桌面快捷方式,当你点击这个桌面快捷方式的时候,Thanox会发布这个快捷方式代表的事实。

例如;实现一个一键锁屏快捷方式,即:点击桌面一键锁屏快捷方式时锁屏。

 

首先创建一个快捷方式引擎:

 

prlfile-shortcut-create 

 

接下来,添加一个情景模式,监听这个快捷方式的启动事件,并指定锁屏命令:

 

[
  {
    "name": "Profile shortcut",
    "description": "监听一个快捷方式启动事件,以一键锁屏为例",
    "priority": 2,
    "condition": "shortcutLaunched == true && shortcutValue == \"turn screen off\"",
    "actions": [
      "power.sleep(0);"
    ]
  }
]

 

保存之后,点击桌面上的一键锁屏快捷方式即可实现一键锁屏功能了。

 

 

0.5. Handle

Thanox会提供一部分执行动作所需要的handle能力。例如ui,专门用于做界面显示相关的动作。

你可以使用handle.action(params)来执行自定义的动作。

下面是目前支持的Handle能力。

 

0.5.1. killer

能力 含义 参数 举例 返回值
killPackage 杀死应用 包名 killer.killPackage(“com.tencent.mm”) Boolean(true/false)

接口定义:

@HandlerName("killer")
interface IKiller {
    boolean killPackage(String pkgName);
}

举例:

"actions": [
  // 杀死微信
  "killer.killPackage(\"com.tencent.mm\")"
]

 

0.5.2. activity

能力 含义 参数 举例 返回值
launchProcessForPackage 启动应用进程 包名 如下 Boolean(true/false)
launchMainActivityForPackage 打开应用主界面 包名 如下 Boolean(true/false)
getLaunchIntentForPackage 获取应用的启动Intent 包名 如下 Intent
getFrontAppPackage 获取当前前台应用包名 如下 String(字符串)
getFrontAppPackageComponent 获取当前前台应用组件 如下 ComponentName

接口定义:

@HandlerName("activity")
interface IActivity {
    boolean launchProcessForPackage(String pkgName);

    boolean launchActivity(Intent intent);

    boolean launchMainActivityForPackage(String pkgName);

    Intent getLaunchIntentForPackage(String pkgName);

    String getFrontAppPackage();

    ComponentName getFrontAppPackageComponent();
}

举例:

"actions": [
  // 启动微信进程
  "activity.launchProcessForPackage(\"com.tencent.mm\")",
  // 打开微信主界面
  "activity.launchMainActivityForPackage(\"com.tencent.mm\")",
  // 吐司显示目前前台应用包名
  "toast.showShortToast(activity.getFrontAppPackage())"
]

 

0.5.3. power

电源相关能力

能力 含义 参数 举例 返回值
sleep 休眠(锁屏) 延迟的毫秒数 如下
wakeup 唤醒 延迟的毫秒数 如下
setBrightness 设置屏幕亮度 亮度Level值(0~255) 如下
getBrightness 获取当前屏幕亮度 如下 度Level值(0~255)
setAutoBrightnessEnabled 设置自动亮度开关 true/false 如下
isAutoBrightnessEnabled 是否开启自动亮度 如下 true/false

接口定义:

@HandlerName("power")
interface IPower {
    void sleep(long delay);

    void wakeup(long delay);
  
    void setBrightness(int level);

    int getBrightness();

    void setAutoBrightnessEnabled(boolean enable);

    boolean isAutoBrightnessEnabled();
}

举例:

{
    "actions": [
        // 立即锁屏
        "power.sleep(0)",
        // 1秒后亮屏
        "power.wakeup(1000)",
        "power.setAutoBrightnessEnabled(false)",
        "power.setBrightness(power.getBrightness() + 1)",
    ]
}

 

0.5.4. task

任务相关能力

能力 含义 参数 举例 返回值
removeTasksForPackage 移除应用的最近任务 包名 如下
hasTaskFromPackage 应用是否有最近任务 包名 如下 Boolean(true/false)
clearBackgroundTasks 调用thanox的任务清理功能,清理所有最近任务 如下

接口定义:

@HandlerName("task")
interface ITask {
    void removeTasksForPackage(String pkgName);

    boolean hasTaskFromPackage(String pkgName);

    void clearBackgroundTasks();
}

举例:

{
  	// 判断微信是否有任务
    "condition": "true && task.hasTaskFromPackage(\"com.tencent.mm\")",
    "actions": [
        // 移除微信的最近任务
        "task.removeTasksForPackage(\"com.tencent.mm\")"
    ]
}

 

0.5.5. ui

界面相关

能力 含义 参数 举例 返回值
showShortToast 显示提示 如下
showLongToast 显示时间较短的提示 如下
showDialog 显示对话框 标题文本,信息文本,确认按钮文本 如下
showNotification 显示通知 标签(可用于取消通知)标题文本,信息文本,是否重要 如下
cancelNotification 取消通知 标签 如下
showDanmu 显示一条弹幕 [since Thanox4.0.9] 弹幕文本 如下
showDanmu 显示一条带图标的弹幕 [since Thanox4.0.9] 图标,弹幕文本 如下

接口定义:

@HandlerName("ui")
interface IUI {

    void showShortToast(@NonNull String msg);

    void showLongToast(@NonNull String msg);

    void showDialog(@Nullable String title,
                    @NonNull String msg,
                    @Nullable String yes);

    void showNotification(
            @NonNull String notificationTag,
            @NonNull String title,
            @NonNull String msg,
            boolean important);

    void cancelNotification(@NonNull String notificationTag);
    
    void showDanmu(@NonNull Object msg);

    /**
     * Show a danmu on your screen.
     *
     * @param icon Icon for danmu, supported format:
     *             app icon: app://app.package.name
     * @param msg  The text to show
     */
    void showDanmu(@Nullable String icon, @NonNull Object msg);
}

使用弹幕API的例子:

[
  {
    "name": "弹幕通知 Danmu notification",
    "description": "收到通知时用弹幕展示 Show Danmu on notification posted",
    "priority": 1,
    "condition": "notificationAdded && !notification.isForegroundService && pkgName != \"android\"",
    "actions": [
      "ui.showDanmu(\"app://\" + pkgName, thanos.pkgManager.getAppInfo(pkgName).appLabel + \" \" + notificationTitle + \"\n\" + notificationContent);"
    ]
  }
]

 

0.5.6. hw

硬件操作能力

能力 含义 参数 举例 返回值
enableWifi 看名字 包名 如下 Boolean(true/false)
disableWifi 看名字 如下 Boolean(true/false)
isWifiEnabled 看名字 如下 Boolean(true/false)
enableLocation 看名字 如下 Boolean(true/false)
disableLocation 看名字 如下 Boolean(true/false)
isLocationEnabled 看名字 如下 Boolean(true/false)
enableBT 看名字 如下 Boolean(true/false)
disableBT 看名字 如下 Boolean(true/false)
isBTEnabled 看名字 如下 Boolean(true/false)
enableNfc 看名字 如下 Boolean(true/false)
disableNfc 看名字 如下 Boolean(true/false)
isNfcEnabled 看名字 如下 Boolean(true/false)
enabledFlashlight 看名字 如下 Boolean(true/false)
disableFlashlight 看名字 如下 Boolean(true/false)
isFlashlightEnabled 看名字 如下 Boolean(true/false)
isFlashlightAvailable 手电筒是否可用(被占用?无硬件?) 如下 Boolean(true/false)
         

接口定义:

@HandlerName("hw")
interface IHW {
    boolean enableWifi();

    boolean disableWifi();

    boolean isWifiEnabled();

    boolean enableLocation();

    boolean disableLocation();

    boolean isLocationEnabled();

    boolean enableBT();

    boolean disableBT();

    boolean isBTEnabled();

    boolean enableNfc();

    boolean disableNfc();

    boolean isNfcEnabled();
  
    boolean enabledFlashlight();

    boolean disableFlashlight();

    boolean isFlashlightEnabled();

    boolean isFlashlightAvailable();
}

举例:

[
  {
    "name": "Enable BT",
    "description": "打开微信时,打开蓝牙",
    "priority": 2,
    "condition": "frontPkgChanged == true && to == \"com.tencent.mm\"",
    "actions": [
      "ui.showShortToast(\"蓝牙状态\" + (hw.isBTEnabled() ? \"开启\" : \"关闭\"));",
      "ui.showShortToast(\"正在打开蓝牙...\");",
      "ui.showShortToast(\"蓝牙打开\" + (hw.enableBT() ? \"成功\" : \"失败\"));",
      // 打开GPS
      "hw.enableLocation()",
      "hw.enableWifi()"
    ]
  }
]

 

0.5.7. io

文件读写能力。

注意:受限于文件权限,所有文件的根目录为/data/system/thanos_xxx/profile_user_io

能力 含义 参数 举例 返回值
read 读取文件 文件相对路径 String
write 写内容到文件 文件相对路径 Boolean
writeAppend 写内容到文件,追加 文件相对路径 Boolean

接口定义:

@HandlerName("io")
interface IIO {

    String read(String path);

    boolean write(String path, String content);

    boolean writeAppend(String path, String content);
}

 

0.5.8. data

移动数据相关能力。

能力 含义 参数 举例 返回值
setDataEnabled 设置移动数据开启状态 true打开,false关闭 如下 Boolean(true/false)
setDataEnabled 设置移动数据开启状态(可以指定卡序号) 卡序号,true打开,false关闭 如下
setDataEnabledForSlot 设置移动数据开启状态(可以指定卡槽号) 卡序号,true打开,false关闭 如下
isDataEnabled 获取移动数据开启状态 true打开,false关闭 如下 Boolean(true/false)
isDataEnabledForSlot 获取移动数据开启状态(可以指定卡槽号) true打开,false关闭 如下 Boolean(true/false)
setDataNetworkType 设置网络模式 type 如下
setDataNetworkTypeForPhone 设置网络模式(指定某个卡) phoneId,type 如下
setDataNetworkTypeForSlot 设置网络模式(指定某个卡槽号) slotId,type 如下
getCurrentPreferredNetworkMode 获取当前默认卡的网络模式 如下 int
getCurrentPreferredNetworkMode 获取某subId的网络模式 subId 如下 int
getCurrentPreferredNetworkModeForSlot 获取某卡槽的网络模式 slotId 如下 int
isAirplaneModeEnabled 是否开启了飞行模式 Boolean

接口定义:

@HandlerName("data")
interface IData {
    void setDataEnabled(boolean enable);

    void setDataEnabled(int subId, boolean enable);

    void setDataEnabledForSlot(int slotId, boolean enable);

    boolean isDataEnabled();

    boolean isDataEnabledForSlot(int slotId);

    void setDataNetworkType(int type);

    void setDataNetworkTypeForPhone(int phoneId, int type);

    void setDataNetworkTypeForSlot(int slotId, int type);

    int getCurrentPreferredNetworkMode();

    int getCurrentPreferredNetworkMode(int subId);

    int getCurrentPreferredNetworkModeForSlot(int slotId);
}

数据网络模式类型:

// Network type enums, primarily used by android/telephony/TelephonyManager.java.
// Do not add negative types.
enum NetworkTypeEnum {
    NETWORK_TYPE_UNKNOWN = 0;
    NETWORK_TYPE_GPRS = 1;
    NETWORK_TYPE_EDGE = 2;
    NETWORK_TYPE_UMTS = 3;
    NETWORK_TYPE_CDMA = 4;
    NETWORK_TYPE_EVDO_0 = 5;
    NETWORK_TYPE_EVDO_A = 6;
    NETWORK_TYPE_1XRTT = 7;
    NETWORK_TYPE_HSDPA = 8;
    NETWORK_TYPE_HSUPA = 9;
    NETWORK_TYPE_HSPA = 10;
    NETWORK_TYPE_IDEN = 11;
    NETWORK_TYPE_EVDO_B = 12;
    NETWORK_TYPE_LTE = 13;
    NETWORK_TYPE_EHRPD = 14;
    NETWORK_TYPE_HSPAP = 15;
    NETWORK_TYPE_GSM = 16;
    NETWORK_TYPE_TD_SCDMA = 17;
    NETWORK_TYPE_IWLAN = 18;
    NETWORK_TYPE_LTE_CA = 19;
    NETWORK_TYPE_NR = 20;
}

举例:

[
  {
    "name": "Enable Data",
    "description": "打开微信时,打开移动数据",
    "priority": 2,
    "condition": "frontPkgChanged == true && to == \"com.tencent.mm\"",
    "actions": [
      "ui.showShortToast(\"移动数据当前\" + (data.isDataEnabled() ? \"开启\" : \"关闭\"));",
      "ui.showShortToast(\"正在打开移动数据...\");",
      "data.setDataEnabled(true)"
    ]
  }
]

 

0.5.9. ringtone

铃音振动能力。

能力 含义 参数 举例 返回值
dingdingding 看名字 无或者重复次数 如下
wengwengweng 看名字 无或者重复次数 如下

接口定义:

@HandlerName("ringtone")
interface IRingtone {
    void dingdingding();

    void wengwengweng();

    void dingdingding(int repeat);

    void wengwengweng(int repeat);
}

 

0.5.10. sh

Shell sh能力。

能力 含义 参数 举例 返回值
exe 执行sh命令 命令字符串 结果

接口定义:

@HandlerName("sh")
interface ISh {
    CommandResult exe(String command);
}

 

0.5.11. input

按键输入能力。

能力 含义 参数 举例 返回值
injectKey 执行sh命令 命令字符串 结果
getLastKey 返回上次按键码 按键码
getLastKeyTime 返回上次按键的系统时间 系统时间mills

接口定义:

@HandlerName("input")
interface IInput {

    boolean injectKey(int code);

    int getLastKey();

    long getLastKeyTime();
}

 

0.5.12. pkg

包管理能力。

能力 含义 参数 举例 返回值
disableApplication 冻结应用 包名
enableApplication 解冻应用 包名
isApplicationEnabled 应用是否为非冻结状态 包名 Boolean(true/false)

接口定义:

@HandlerName("pkg")
interface IPkg {

    void disableApplication(String pkg);

    void enableApplication(String pkg);

    boolean isApplicationEnabled(String pkg);
}


 

0.5.13. Log

日志打印工具。

使用示例:

log.log("Log message");

接口定义:

@HandlerName("log")
public interface ILog {
    void log(String content);
}

 

0.5.14. Audio

声音管理相关。

能力 含义 参数 举例 返回值
getRingerMode 获取铃音模式 模式的int值
setRingerMode 设置铃音模式 模式的int值

铃音模式的int值标识:https://developer.android.com/reference/android/media/AudioManager#RINGER_MODE_SILENT

int RINGER_MODE_SILENT = 0;
int RINGER_MODE_VIBRATE = 1;
int RINGER_MODE_NORMAL = 2;

接口定义:

@HandlerName("audio")
interface IAudio {
    int getRingerMode();
  
  	// https://developer.android.com/reference/android/media/AudioManager#setRingerMode(int)
    void setRingerMode(int ringerMode);
}

 

0.5.15. Battery

Battery相关。

能力 含义 参数 举例 返回值
getBatteryState 获取电池状态 参考下方例子 BatteryState

BatteryState类型定义:

data class BatteryState(
    // 电量
    val batteryLevel: Int = 0,
    // 是否在充电
    val isCharging: Boolean = false,
    // 是否在AC充电
    val isAcCharge: Boolean = false,
    // 是否在USB充电
    val isUsbCharge: Boolean = false,
)

接口定义:

@HandlerName("battery")
public interface IBattery {
    BatteryState getBatteryState();
}

使用举例,获取电池电量:battery.getBatteryState().batteryLevel

 

0.5.16. Context

Android System Context,Android系统上下文。 基于Context可以实现更丰富的功能调用。举例:

[
  {
    "name": "Use System Context",
    "description": "调用Context,获取当前User信息",
    "priority": 1,
    "condition": "screenOn == true",
    "actions": [
      "ui.showShortToast(\"User info: \" + context.getSystemService(context.USER_SERVICE).getUserInfo(android.os.UserHandle.getCallingUserId()).name);"
    ]
  }
]

 

0.5.17. Thanos

你可以使用thanox或thanos来调用Thanos API,举例:

[
  {
    "name": "Thanos API",
    "description": "Example actions with thanos API",
    "priority": 2,
    "condition": "frontPkgChanged == true && to == \"com.tencent.mm\"",
    "actions": [
      "thanos.getProfileManager().enableRuleByName(\"my_we_chat_rule\");"
    ]
  }
]

 

0.5.18. Actor(废弃)

情景模式Action相关,目前支持Action的延迟执行。

Actor已被废弃:请使用delay属性实现延迟效果。例如:

[
  {
    "name": "Delayed action example",
    "description": "...",
    "priority": 1,
    "delay": 2000,
    "condition": "...",
    "actions": [...]
  }
]
能力 含义 参数 举例 返回值
delayed 延迟执行一个Action 延迟毫秒数,Action表达式

接口定义:

@HandlerName("actor")
public interface IActor {
    void delayed(long delayMillis, String action);
}

举例:

[
  {
    "name": "Delayed action example",
    "description": "Execute the action delay 2s: show a short toast and log the event 2s after app switched.",
    "priority": 1,
    "condition": "frontPkgChanged == true",
    "actions": [
      "actor.delayed(2000, \"ui.showShortToast(\\\"App switched 2s ago\\\")\")",
      "actor.delayed(2000, \"log.log(to)\")"
    ]
  }
]

 

 

0.6. 全局变量

全局变量:name-List,名字---字符串列表

可用于条件判断,事件处理等。

Thanox支持创建,导入全局变量。发布事实时,你可以用过globalVarOf$拼接变量名来访问。以变量apps为例:

[
  {
    "name": "Use var example",
    "description": "应用切换时,如果当前前台应用在定义的变量列表apps中,Toast使用输出包名",
    "priority": 1,
    "condition": "frontPkgChanged == true && globalVarOf$apps.contains(to)",
    "actions": [
      "ui.showShortToast(to);"
    ]
  }
]