Android使用Shell命令配合Tasker控制手机

Secure Settings 对比 Shell 命令

去年我写过一篇 Android 使用 Trigger + Tasker 设定 NFC 标签 的文章,主要介绍怎么使用 TaskerTrigger App 设定 Android 手机刷 NFC 标签时执行指定的操作。该文章中对于手机的 飞行模式 / GPS / NFC 等功能的控制操作都是通过 Secure Settings App 实现的。

不过可惜的是我的华硕 Zenfone2 手机 ROM 升级到 6.0 版本之后,Secure Settings App 就有很多功能不能正常工作了,而且由于开发者也基本不再维护该 App 也有差不多两年没有任何更新。

最近看到 Best run shell commands in Tasker 文章介绍 Tasker 的几个常用 Shell 命令控制移动数据、飞行模式等选项,使用 Tasker 自带的运行 Shell 命令功能相比 Secure Settings 插件也有一些好处:

  • Tasker 直接支持运行 Shell 命令(新增 操作类别 -> 代码 -> 运行外壳 即可),不需要专门安装 Secure Settings 等第三方 App;
  • 多数命令在手机 root 后就能正常工作,不像 Secure Settings 那样需要特别安装成系统 App;
  • Shell 命令失效需要替换时也比较灵活,直接改 Shell 命令行就可以。

因此我还是卸载了 Secure Settings App,将原来文章里的所有 Tasker 任务的 Secure Settings 操作都以 Shell 命令进行替代。

Tasker 任务使用 Shell 命令

数据开关 + 运行 Shadowsocks

为实现以下目标:

  1. 具有路由器翻墙的住处网络环境下自动关闭手机 Shadowsocks 和移动数据;
  2. 其它网络环境下都开启 Shadowsocks 手机翻墙;
  3. 任何 Wi-Fi 环境下关闭移动数据以省电;
  4. 离开任何 Wi-Fi 自动开启移动数据。

为此我建了 4 个 Tasker 配置和任务(当然也可以更简单):

  1. 连接住处的 OpenWRT Wi-Fi(根据 Tasker 的 SSID 条件区分)
    关闭 Shadowsocks 和移动数据;
  2. 连接其它 Wi-Fi
    关闭移动数据;
  3. 离开任何 Wi-Fi
    开启移动数据;
  4. 离开住处 Wi-Fi
    开启 Shadowsocks。

现在 Android 版本 Shadowsocks App 是自带 Tasker 插件支持的(操作类别里选 插件 -> 影梭 即可),开启和关闭 Shadowsocks 配置非常简单。

移动数据开关可以分别用下面的命令(Tasker 运行外壳中需要启用 使用Root 选项):

svc data enable
svc data disable

控制飞行模式及 NFC

为了实现和之前文章里类似的目标:

  1. 睡觉前刷 NFC 标签开启飞行模式;
  2. 打开 NFC(这样起来之后可以刷 NFC 标签);
  3. 起来刷 NFC 标签关闭飞行模式。

另外考虑最好只使用一个 NFC 标签就达到效果,这里我只建了一个 Tasker 任务包含 4 个操作:

  1. Tasker 操作类别中选 变量 -> 变量设置%TMPAIR 发往 %AIR
    先保存 %AIR 这个 Tasker 自带的飞行模式变量;
  2. 如果 %AIR = off 则运行外壳开启飞行模式;
  3. 如果 %AIR = on 则运行外壳开启 NFC;
  4. 如果 %TMPAIR = on 则运行外壳关闭飞行模式。

开启关闭飞行模式

开启和关闭飞行模式可以直接使用下面的两条命令:

settings put global airplane_mode_on 1; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
settings put global airplane_mode_on 0; am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false

开启关闭 NFC

开启和关闭 NFC 功能则相对复杂一些,需要区分 Android 系统版本:

  • Android 4.4 以上:
# Disable NFC
service call nfc 5
# Enable NFC
service call nfc 6
  • Android 4.0.1 - Android 4.3.1:
# Disable NFC
service call nfc 4
# Enable NFC
service call nfc 5
  • Android 2.3.4 - Android 2.3.7:
# Disable NFC
service call nfc 18
# Enable NFC
service call nfc 19
  • Android 2.3.3:
# Disable NFC
service call nfc 20
# Enable NFC
service call nfc 21
  • Android 2.3.2:
# Disable NFC
service call nfc 13
# Enable NFC
service call nfc 14

我在运行 Android 6.0 系统的 Zenfone2 手机上可以正常使用第一段的两条命令控制系统 NFC 功能。

GPS 开关 + 开启关闭百度地图

需求还是和之前的文章相同:

  1. 刷 NFC 标签自动开启 GPS 和百度地图进行导航:
  2. 导航完成后再刷一次 NFC 标签自动关闭百度地图并关闭 GPS。

为此我还是只建立一个 Tasker 任务,包含多个操作:

  1. Tasker 操作类别中选 变量 -> 变量设置%TMPGPS 发往 %GPS
    先保存 %GPS 这个 Tasker 自带的 GPS 设置变量;
  2. 如果 %GPS = off 则启动应用 -> 百度地图;
  3. 如果 %GPS = off 则运行外壳开启 GPS;
  4. 如果 %TMPGPS != on 则停止运行任务(操作类别中选 任务 -> 停止)忽略后续操作;
  5. 按钮 -> 后退(操作类别中选 输入 -> 按钮),此操作需要添加多个以模拟持续按返回键退出百度地图;
  6. 杀死应用 -> 百度地图;
  7. 运行外壳关闭 GPS。

通过 Shell 命令开启关闭 GPS 也稍微有点特殊,需要使用下面两条命令:

settings put secure location_providers_allowed +gps
settings put secure location_providers_allowed -gps

后记

为了方便查询,我把一些可能经常用到的 Android Shell 控制命令也整理保存到我的 Wiki 知识库中了,读者可以点击 Wiki 链接 Android Shell 控制手机 查看。后续有其它 Shell 命令需要加进来或者修改时,我也会尽量及时更新该文档的,最后祝大家玩的开心。

3 条评论 在此博文.
  1. 文栋说自媒体:

    虽然看不懂,但必须支持!

  2. iHead:

    博主你好,
    最近也在折腾 tasker,GPS 那部分楼主估计写漏了两下划线
    应该是 location_providers_allowed
    还有 GPS 是有两种模式的,一种是通过数据、WIFI,一种是通过 GPS,如果要开启高精度
    就得同时满足
    settings put secure location_providers_allowed +network
    settings put secure location_providers_allowed +gps

  3. Uranus Zhou:

    下划线贴上去的时候估计被自动删除了 ,谢谢指出,我改下。
    数据和GPS那个因为network方式网络定位我是一直开着的,需要导航时只开关gps,嘿嘿

发表评论





*