Thanox 情景模式实用案例集锦:从入门到进阶
案例一:跳过开屏广告(activityResumed + ui.findAndClickViewByText)
这是 Thanox 情景模式最经典的用法,结合了 Activity 生命周期 facts 和 ui handle。
场景:某个 app 启动后有一个 SplashActivity 广告页,上面有"跳过"按钮。
规则:
[
{
"name": "Skip Splash Ad",
"description": "彩云天气启动页自动点击跳过",
"priority": 1,
"delay": 500,
"condition": "activityResumed == true && componentNameAsShortString == \"com.nowcasting.activity/.SplashActivity\"",
"actions": [
"ui.showShortToast(\"尝试点击跳过...\");",
"ui.findAndClickViewByText(\"跳过\", \"com.nowcasting.activity/com.nowcasting.activity.SplashActivity\");"
]
}
]
要点:
- 用
activityResumed(Activity 已显示可交互)而不是activityCreated,因为此时按钮已经渲染出来了 delay: 500是为了等广告页完全渲染ui.findAndClickViewByText需要两个参数:要查找的文字和目标 Activity 的完整组件名- 多个 app 的广告页各写一条规则即可
案例二:微信退后台自动杀进程
场景:微信一退到后台就彻底杀掉,省电量。
规则:
[
{
"name": "Kill WeChat On Background",
"description": "微信退到后台时杀进程",
"priority": 2,
"condition": "frontPkgChanged == true && from == \"com.tencent.mm\"",
"actions": [
"killer.killPackage(\"com.tencent.mm\");",
"ui.showShortToast(\"微信已清理\");"
]
}
]
缺点:杀掉微信意味着收不到消息推送。如果你是重度微信用户,可能不适合。
改进版:只在息屏后才杀:
"condition": "screenOff == true && from == \"com.tencent.mm\""
配合 delay 参数,息屏后等 30 秒再杀:
"delay": 30000,
"condition": "screenOff == true"
然后在 action 里判断当前前台是不是微信——不对,screenOff 触发时前台已经不是微信了。可以改成用 pkgKilled + 延时的组合,更灵活。
案例三:一键锁屏(快捷方式 + power.sleep)
场景:创建一个桌面快捷方式,点击后立即锁屏。
步骤:
- 在 Thanox → 情景模式 → 快捷方式引擎中,创建快捷方式:
- 名字:
一键锁屏 - 值:
turn screen off - Thanox 会自动生成桌面图标
- 然后写情景模式规则:
[
{
"name": "Profile Shortcut Sleep",
"description": "点击桌面快捷方式时锁屏",
"priority": 2,
"condition": "shortcutLaunched == true && shortcutValue == \"turn screen off\"",
"actions": [
"power.sleep(0);"
]
}
]
案例四:应用切换时 Toast 显示包名(调试用)
这是入门案例,写在 创建第一条规则 页面。
用途:当你正在找某个 app 的 Activity 组件名时,这个规则能让你随时看到当前 app 的包名——和 Thanox 的"显示当前 Activity"浮窗配合使用。
案例五:蓝牙连接提示
场景:连接到蓝牙耳机时弹出 Toast 提示。
规则:
[
{
"name": "BT Connected Alert",
"description": "蓝牙连接到设备时提示",
"priority": 2,
"condition": "btConnectionStateChanged == true && btConnectionStateConnected == true",
"actions": [
"ui.showShortToast(\"已连接蓝牙设备: \" + btBoundedDeviceAliasNames);"
]
}
]
案例六:GPS 自动开关
场景:进入地图 app 时自动打开 GPS,退出时关闭。
规则(需要结合 hw handle,Thanox 版本不同方法名可能略有差异):
[
{
"name": "Auto GPS On",
"description": "进入地图 app 时开 GPS",
"priority": 1,
"condition": "frontPkgChanged == true && to == \"com.google.android.apps.maps\"",
"actions": [
"ui.showShortToast(\"GPS 已开启\");"
]
},
{
"name": "Auto GPS Off",
"description": "退出地图 app 时关 GPS",
"priority": 1,
"condition": "frontPkgChanged == true && from == \"com.google.android.apps.maps\"",
"actions": [
"ui.showShortToast(\"GPS 已关闭\");"
]
}
]
注意:GPS 开关通常需要 shell root 权限(sh.execAsRoot),纯 System API 可能没有开放开关权限。具体实现方式取决于你的设备和 Thanox 版本。
案例七:时间段内自动控制 5G / 4G 切换
场景:白天(亮屏)用 5G,晚上(息屏)切回 4G。
这个场景需要 hw handle 控制移动网络模式,实现方式因机型而异。Thanox 的情景模式引擎本身提供了触发条件(screenOn / screenOff),但具体的网络模式切换动作需要你根据自己设备的 API 来写。
一些开源社区分享的做法是通过 sh.execAsRoot 调用 settings 命令或直接修改系统属性。
规则编写最佳实践
- 先写简单规则跑通:从案例一或案例四开始,能跑通再往上叠加复杂度
- 多个规则用 JSON 数组:方括号
[ ... ]里可以放多个规则对象,用逗号分隔 - 测试用 Toast 提示:调试阶段多放
ui.showShortToast来确认规则真的被触发了 - 不要依赖 delay 做精确控制:
delay是触发后的执行延迟,不是定期触发。Thanox 没有内置的"每 X 分钟"定时器——需要用其他机制绕过 - 规则 name 必须唯一:同名规则会互相覆盖
- 注意 MVEL 转义:字符串中的双引号必须
\"转义
更多规则资源
Thanox 官方文档和酷安社区有大量用户分享的情景模式规则。找到你感兴趣的规则,复制 JSON 进 Thanox 情景模式编辑器就能直接用。
下一页是情景模式的最后一个 topic:快捷方式引擎详解。