QSL4A 通信功能——Python 发送短信、拨电话、发邮件
发送短信
直接发送(静默)
from androidhelper import Android
droid = Android()
result = droid.smsSend("13800138000", "这是从 QPython 发出的短信").result
print(result) # 返回发送状态
这会直接发送短信,用户看不到发送过程,适合后台脚本自动通知场景。
发送前确认
# 先弹出对话框让用户确认
droid.dialogCreateAlert("发送短信", "即将发送短信到 13800138000,确认?")
droid.dialogSetPositiveButtonText("发送")
droid.dialogSetNegativeButtonText("取消")
droid.dialogShow()
response = droid.dialogGetResponse().result
if response.get("which") == "positive":
droid.smsSend("13800138000", "短信内容")
获取短信列表
# 读取收件箱最近 10 条短信
sms_list = droid.smsGetMessages(True, "inbox", 10).result
for sms in sms_list:
print(f"发件人: {sms.get('address')}, 内容: {sms.get('body')}")
True 参数表示只返回未读短信。第二个参数可以是 "inbox"(收件箱)、"sent"(已发送)等。
拨打电话
# 直接拨号(会拉起系统拨号界面)
droid.phoneDialNumber("13800138000")
这会打开 Android 系统的拨号界面并自动填入号码,用户手动点绿色拨号键才真正拨出。QSL4A 不提供完全静默的拨号 API——这是 Android 安全策略的限制,防止恶意 App 私自拨电话扣费。
发送邮件
QSL4A 通过 Android 的标准 Intent 机制调起系统邮件客户端,用户在弹出的邮件 App 里手动确认发送:
droid.emailSend("邮件主题", "邮件正文", ["收件人@example.com"])
部分版本可能还支持附件:
droid.emailSend(
subject="数据报告",
body="请查收附件",
to=["report@example.com"],
attachment="/path/to/report.csv"
)
打开网页
droid.webViewShow("https://www.example.com")
这会在 QPython 内置的轻量浏览器里打开网页,或者调用系统浏览器。具体行为取决于 QSL4A 版本。
权限需求
| API | 需要的权限 |
|---|---|
smsSend | 发送短信 + 读取短信 |
smsGetMessages | 读取短信 |
phoneDialNumber | 拨打电话 + 读取手机状态 |
emailSend | 无额外权限(依赖系统邮件 App) |
webViewShow | 完全互联网访问权限 |
注意事项
静默发送短信的限制
Android 安全策略对静默短信发送有限制:
- Android 10+:普通 App 不能静默发送短信,必须经过用户确认
- 部分运营商对高频短信发送有限速
- 用于自动化通知时,建议在短信里注明「QPython 自动发送」以免被误认为垃圾短信
电话号码格式
不同地区的电话号码格式不同:
- 中国大陆:11 位手机号即可(如
13800138000) - 国际号码:需要加国际区号(如
+1美国,+86中国)
电话 vs SIP
phoneDialNumber 是走传统电话网络的。如果你想打 IP 电话(SIP),QSL4A 不直接支持,需要用第三方 SIP 库自己实现。
通信功能的实际场景
| 场景 | 用什么 | 示例 |
|---|---|---|
| 脚本跑完通知自己 | smsSend 或 notify | 定时任务完成后发短信给自己 |
| 自动化数据上报 | smsSend(小数据量)或 HTTP | 把传感器数据短信发到邮箱(需配合短信转邮件) |
| 分享内容给朋友 | emailSend | 把分析报告发邮件 |
| 快速打开网页 | webViewShow | 在脚本里打开帮助文档 |
小结
QSL4A 的通信 API 让 Python 脚本可以参与到 Android 的日常通信中。但要注意 Android 安全策略的限制——静默发短信、静默拨电话这类完全自动化的操作在新版本 Android 上基本被禁止,这是系统层面的设计,不是 QSL4A 的问题。实际开发中最常用的是 notify(状态栏通知)和 smsSend(用户确认后发短信)。
QSL4A 模块到此结束。接下来进入本地 AI 开发——QPython 4.0 的大杀器。