短信、通话记录和联系人
在电脑上读取手机里存储的短信、通话记录和联系人。都是可选功能,在手机上允许之前保持关闭。
本页为译文。如与英文版不一致,以英文版为准。 English
有三条命令读取手机里存储的个人数据:sms 读短信,calls 读通话记录,contacts 读保存的联系人。它们都是可选功能,各自需要单独的权限。在你允许之前,手机会返回 NO_PERMISSION。AI 智能体只有在 --tools 里写了名称时才能使用。
开启
在手机上打开 Droidline 的 设置 标签页。每条命令都有自己的卡片:短信、通话记录 和 联系人。在需要的卡片上点 允许,再在 Android 弹出的对话框中允许。如果两次选择了“不允许”,Android 就不再弹出对话框,这时按钮会打开应用信息,你可以在那里手动开启权限。
以后要关闭,点对应卡片上的 应用信息,撤销权限即可。
短信
for m in d.sms(max=5):
print(m["address"], m["text"])
code = d.sms(contains="验证码", within=300, max=1)for (const m of await d.sms({ max: 5 })) console.log(m.address, m.text);
const code = await d.sms({ contains: "验证码", within: 300, max: 1 });foreach (var m in await d.SmsAsync(max: 5))
Console.WriteLine($"{m.Get<string>("address")} {m.Get<string>("text")}");
var code = await d.SmsAsync(contains: "验证码", within: 300, max: 1);droidline sms --max 5
droidline sms --contains 验证码 --within 300 --max 1按时间从新到旧返回。每条短信包含 id、address(号码或发件人名称)、text、time(自 1970 年起的毫秒数,以手机时钟为准)、box(inbox 或 sent)、read 和 mms。
| 选项 | 作用 |
|---|---|
box | inbox(默认)、sent 或 all |
address | 只要号码或发件人包含此文字的。忽略空格和 -,所以 138 0013 能找到 138-0013-8000 |
contains | 只要正文包含此文字的,不区分大小写 |
within | 只要最近这么多秒内的。0(默认)表示不限时间 |
max | 最多返回的条数,1 到 500,默认 20 |
sms 读取短信和彩信中的文字部分,彩信里的图片不包含在内。聊天消息(RCS,在 Google 信息和三星信息中显示为“聊天”)由短信应用自己保存,sms 看不到。这类消息可以用 dump 从屏幕上读取,或通过通知获取。
通话记录
for c in d.calls(type="missed", within=3600):
print(c["number"], c["name"], c["time"])for (const c of await d.calls({ type: "missed", within: 3600 })) console.log(c.number, c.name, c.time);foreach (var c in await d.CallsAsync(type: "missed", within: 3600))
Console.WriteLine($"{c.Get<string>("number")} {c.Get<string>("name")}");droidline calls --type missed --within 3600按时间从新到旧返回。每条通话包含 id、number、name(已保存的联系人名称,没有时为空)、type、time 和 duration(秒)。type 为 incoming、outgoing、missed、rejected、blocked 或 voicemail。
| 选项 | 作用 |
|---|---|
type | all(默认)、incoming、outgoing、missed、rejected 或 blocked |
number | 只要号码或已存名称包含此文字的。忽略空格和 - |
within | 只要最近这么多秒内的。0(默认)表示不限时间 |
max | 最多返回的条数,1 到 500,默认 20 |
只列出通过电话应用拨打和接听的通话。即时通讯等其他应用内的语音通话通常不会出现。
联系人
for c in d.contacts("王"):
print(c["name"], c["numbers"], c["emails"])for (const c of await d.contacts("王")) console.log(c.name, c.numbers, c.emails);foreach (var c in await d.ContactsAsync("王"))
Console.WriteLine($"{c.Get<string>("name")} {string.Join(", ", c.Get<string[]>("numbers")!)}");droidline contacts 王按名称排序返回。每个联系人包含 id、name、numbers 和 emails。
| 选项 | 作用 |
|---|---|
query | 只要名称、号码或邮箱包含此文字的联系人,不区分大小写。号码中的空格和 - 会被忽略 |
max | 最多返回的条数,1 到 500,默认 50 |
配合 AI 智能体使用
droidline mcp 即使列出其他所有工具,也会把 sms、calls 和 contacts 留在外面,只加 --read-only 也不会包含它们。请只把智能体需要的写进 --tools:
{
"mcpServers": {
"droidline": { "command": "droidline", "args": ["mcp", "--tools", "dump,screenshot,touch,sms"] }
}
}
把它们放进 batch 的步骤里,如果 --tools 没有写,也会被拒绝。短信里经常有验证码和银行通知,通话记录和联系人涉及其他人的信息,只在任务确实需要时才交给智能体。
测试环境
Android 13。更新的 Android 版本是否会在短信列表中隐藏验证码,还没有确认。