QPython 中文文档 下载 App

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 安全策略对静默短信发送有限制:

电话号码格式

不同地区的电话号码格式不同:

电话 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 的大杀器。