用Termux API打造你的Android手机自动化神器
在移动设备功能日益丰富的今天,你是否想过让手机按照你的想法自动完成各种任务?Termux这个强大的终端模拟器配合其丰富的API接口,可以让你用简单的脚本语言(如Bash或Python)轻松实现各种自动化操作,完全不需要学习复杂的Android应用开发。
1. Termux API基础配置与权限管理
1.1 环境准备与API安装
要开始使用Termux API,首先需要完成基础环境配置:
pkg update && pkg upgrade pkg install termux-api安装完成后,建议同时安装一些常用工具:
pkg install python git curl wget1.2 权限授予与安全考量
Termux API需要访问各种系统功能,因此需要手动授予相应权限。以下是常见API所需的权限对照表:
| API功能 | 所需权限 | 授权命令 |
|---|---|---|
| 短信相关 | 短信读写 | termux-sms-list后按提示授权 |
| 联系人 | 联系人读取 | termux-contact-list后授权 |
| 位置信息 | 位置访问 | termux-location后授权 |
| 相机 | 相机和存储 | termux-camera-photo前运行termux-setup-storage |
提示:权限只需授予一次,Termux会记住你的选择。但出于安全考虑,建议仅授予脚本实际需要的权限。
2. 实用自动化脚本开发实战
2.1 情景模式自动切换器
利用Termux API,我们可以创建一个根据时间自动切换情景模式的脚本:
#!/data/data/com.termux/files/usr/bin/python3 import time from datetime import datetime from subprocess import run current_hour = datetime.now().hour if 8 <= current_hour < 18: # 工作时间模式 run(["termux-wallpaper", "-f", "/path/to/work_wallpaper.jpg"]) run(["termux-volume", "music", "3"]) run(["termux-toast", "-g", "top", "已切换至工作模式"]) elif 18 <= current_hour < 22: # 休闲模式 run(["termux-wallpaper", "-f", "/path/to/leisure_wallpaper.jpg"]) run(["termux-media-player", "play", "/path/to/relax_music.mp3"]) else: # 睡眠模式 run(["termux-wallpaper", "-f", "/path/to/night_wallpaper.jpg"]) run(["termux-volume", "music", "0"]) run(["termux-vibrate", "-d", "500"])2.2 智能生日祝福自动发送
结合联系人列表和短信API,可以创建一个自动发送生日祝福的脚本:
#!/data/data/com.termux/files/usr/bin/bash # 获取当天日期 TODAY=$(date +"%m-%d") # 从联系人中筛选生日 termux-contact-list | jq -r --arg today "$TODAY" '.[] | select(.birthday != null and (.birthday | contains($today))) | {name, number}' > birthdays.json # 发送祝福短信 while read -r line; do name=$(echo $line | jq -r '.name') number=$(echo $line | jq -r '.number') termux-sms-send -n "$number" "亲爱的${name},祝你生日快乐!" termux-toast "已向${name}发送生日祝福" done < <(jq -c '.' birthdays.json)3. 高级功能与系统集成
3.1 基于位置的自动化触发
通过结合位置API和其他功能,可以实现基于地理位置的自动化:
#!/data/data/com.termux/files/usr/bin/python3 import json from subprocess import run, PIPE # 获取当前位置 result = run(["termux-location", "-p", "network"], stdout=PIPE, text=True) location = json.loads(result.stdout) # 检查是否在常用位置范围内 home_lat, home_lon = 31.2304, 121.4737 # 示例坐标 work_lat, work_lon = 31.2399, 121.4998 def distance(lat1, lon1, lat2, lon2): # 简化版距离计算 return ((lat1-lat2)**2 + (lon1-lon2)**2)**0.5 if distance(location["latitude"], location["longitude"], home_lat, home_lon) < 0.01: run(["termux-toast", "欢迎回家!"]) run(["termux-wallpaper", "-f", "/path/to/home_wallpaper.jpg"]) elif distance(location["latitude"], location["longitude"], work_lat, work_lon) < 0.01: run(["termux-toast", "已到达工作地点"]) run(["termux-vibrate", "-d", "300"])3.2 媒体中心控制脚本
Termux API提供了丰富的媒体控制功能,可以创建个性化的媒体中心:
#!/data/data/com.termux/files/usr/bin/bash # 音乐播放控制函数 music_control() { case $1 in "play") termux-media-player play "$2" ;; "pause") termux-media-player pause ;; "stop") termux-media-player stop ;; "info") termux-media-player info ;; *) echo "无效命令" ;; esac } # 音量调节函数 adjust_volume() { termux-volume $1 $2 termux-toast "已将${1}音量设置为${2}" } # 示例使用 music_control "play" "/storage/music/favorite.mp3" adjust_volume "music" 54. 脚本优化与自动化调度
4.1 使用Termux Job Scheduler定时执行
Termux提供了作业调度功能,可以定期执行脚本:
# 设置每天早上8点执行情景模式脚本 termux-job-scheduler \ --script /path/to/profile_switcher.sh \ --period-ms 86400000 \ # 24小时 --trigger-content-uri "content://com.android.calendar" \ --trigger-content-flag 14.2 错误处理与日志记录
健壮的脚本应该包含错误处理和日志功能:
#!/data/data/com.termux/files/usr/bin/python3 import json import sys from subprocess import run, PIPE, CalledProcessError from datetime import datetime def log_message(message): with open("/path/to/termux_scripts.log", "a") as f: timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") f.write(f"[{timestamp}] {message}\n") try: result = run(["termux-battery-status"], check=True, stdout=PIPE, stderr=PIPE, text=True) battery = json.loads(result.stdout) if battery["percentage"] < 20: run(["termux-toast", "电量低于20%,请充电!"]) run(["termux-vibrate", "-d", "1000"]) log_message(f"电池状态检查完成: {battery['percentage']}%") except CalledProcessError as e: log_message(f"电池状态检查失败: {e.stderr}") run(["termux-toast", "-c", "red", "电池状态获取失败"]) except json.JSONDecodeError: log_message("电池状态数据解析失败")在实际项目中,我发现将常用功能模块化可以大大提高脚本的复用性。例如,可以创建一个包含所有Termux API调用的工具库,然后在不同的脚本中引用。这种方式不仅使代码更整洁,也更容易维护和更新。