回答
Hamibot 本身不提供直接读取短信内容的内置 API。但你可以通过 Android 系统的无障碍服务结合 events 模块来监听短信应用的通知,或者使用 contentResolver 直接查询短信数据库。
方法一:通过事件监听短信通知
如果短信是以通知的形式发出的(例如收到新短信时系统弹出通知),你可以监听通知事件来获取短信内容。
// 文档地址 https://docs.hamibot.com/
auto.waitFor();
events.observeNotification(); // 开启通知监听
events.on('notification', function (n) {
if (n.getPackageName() === 'com.android.mms' || n.getTitle() === '短信') {
log('收到短信通知:\n 标题: %s, 内容: %s', n.getTitle(), n.getText());
}
});
注意:不同手机厂商的短信应用包名可能不同,如
com.samsung.android.messaging(三星)、com.miui.sms(小米)等,需根据实际设备调整。
方法二:查询短信数据库(需要权限)
你也可以使用 context.getContentResolver() 直接读取短信数据库,但这需要用户手动授予“读取短信”权限,并且存在安全和隐私限制。
// 文档地址 https://docs.hamibot.com/
const uri = android.net.Uri.parse('content://sms/inbox');
const projection = ['address', 'body', 'date'];
const cursor = context.getContentResolver().query(uri, projection, null, null, 'date DESC');
if (cursor && cursor.moveToFirst()) {
do {
const phone = cursor.getString(0);
const body = cursor.getString(1);
const date = new Date(cursor.getLong(2));
log('发件人: %s, 内容: %s, 时间: %s', phone, body, date.toLocaleString());
} while (cursor.moveToNext());
cursor.close();
} else {
log('没有读取到短信');
}
⚠️ 提示:
- 此方法在部分 Android 版本或定制 ROM 上可能无法正常工作。
- 需要在 Hamibot 的设置中开启“允许访问短信”等相关权限。
- 建议仅在必要场景下使用,并确保符合当地法律法规。
推荐做法
如果你只是想自动化处理验证码,建议配合 autojs-ocr 或图像识别方式从通知栏或应用界面提取验证码,而不是直接读取短信数据库,以提高兼容性和安全性。
ℹ️ 本回答由 AI 生成,内容仅供参考