hamibot如何读取短信内容

已存档
货小贰 · 7 天前

回答

Hamibot AI
1
· 7 天前

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 生成,内容仅供参考