业务介绍
AIWork 是一款面向开发者和团队协作的 Android 短信监控应用,核心解决 验证码采集与推送 的业务场景。
在实际开发、测试和运维过程中,经常需要实时获取短信验证码(如登录验证、API 注册、风控审核等)。传统手动复制验证码效率低下且容易出错。AIWork 通过自动化短信拦截 + 智能提取 + 即时推送的方式,实现验证码从接收 → 提取 → 通知的全流程自动化,大幅减少人工操作,提升工作效率。
适用场景:
测试团队:自动化测试中验证码实时采集
开发团队:多端登录、账号注册等业务验证码推送
运维监控:关键业务短信通知
个人用户:重要验证码集中管理
功能介绍
核心功能
1. 双通道短信拦截
SMS Receiver 通道:通过 SMS_DELIVER / SMS_RECEIVED 广播直接接收系统短信
通知栏监听通道:通过 Notification Listener Service 监控通知栏中的短信通知
双通道互补,确保在任何状态(前台/后台/锁屏)下都能稳定捕获短信
2. 验证码智能提取
基于正则表达式的数字模板匹配,自动从短信中提取 4-6 位验证码
支持多种验证码格式(纯数字、字母数字混合等)
提取结果实时推送,无需人工干预
3. 飞书卡片推送
通过飞书开放 API 发送富文本卡片消息到指定群组
卡片格式化展示验证码内容,一目了然
支持多群组配置,按业务场景分发
4. 火山云短信 API 集成
集成火山引擎短信服务,支持手机号验证
自动读取本机手机号并与预设配置匹配
多用户配置管理,一键切换
辅助功能
5. 钉钉定时唤醒
通过 WorkManager 定时任务在指定时间启动钉钉应用
支持配置定时执行策略
6. 后台保活机制
前台服务(Foreground Service)+ 通知栏常驻
WakeLock 防止系统休眠
电池优化白名单申请,避免被系统清理
开机自启(BootReceiver),重启后自动恢复
7. 锁屏全屏弹出
利用 USE_FULL_SCREEN_INTENT 在锁屏状态弹出全屏通知
确保验证码及时提醒,不会漏看
8. 安全凭证管理
使用 AndroidX Security Crypto 加密存储 API Key、App Secret 等敏感信息
配置保存前自动校验凭证有效性(飞书 API + 火山云 API)
内置测试卡片发送,验证配置是否正确
9. 智能权限引导
首次启动引导用户授权:存储权限、手机号读取、电池优化白名单、通知监听
权限申请分步执行,用户体验友好
手机号自动识别,匹配预设配置
10. 运行日志查看
实时显示应用运行状态和服务日志
日志区域长按复制到剪贴板
日志持久化到文件,方便问题排查
一、整体架构和设计思路
AIWork 采用 分层架构 + 双通道拦截 的设计思路,整体分为四层:
接入层:短信拦截
SmsReceiver(广播接收):通过 SMS_RECEIVED_ACTION 接收系统短信广播
SmsNotificationListener(通知监听):通过 NotificationListenerService 监控通知栏短信
两通道互补,确保前台/后台/锁屏状态下 100% 捕获
业务层:验证码处理
VerificationExtractor:正则匹配提取 4-6 位数字验证码
ConfigLoader:配置加载(外部文件 → 内置表 → 兜底用户)
ConfigValidator:API 凭证格式校验 + 真实有效性校验
服务层:后台保活
SmsUploadService:前台服务(Foreground Service),通知栏常驻
WakeUpService:锁屏状态全屏弹出
BootReceiver:开机自启
DingTalkScheduler:定时任务调度(钉钉唤醒)
推送层:消息通知
FeishuCardSender:飞书开放 API → 卡片消息推送到群
SmsApiClient:火山云短信 API 调用
二、"我"的负责模块和结果
我负责的模块:
双通道短信拦截 - 从 0 到 1 实现 SMS Receiver + Notification Listener 双通道,确保锁屏状态下也能捕获短信
验证码提取 - 实现基于正则表达式的智能验证码提取,支持 4-6 位纯数字验证码
飞书卡片推送 - 集成飞书开放 API,实现富文本卡片消息推送
配置管理 - 实现配置加载器(优先级:外部文件 > 内置表 > 兜底)和加密存储
后台保活 - 实现前台服务 + WakeLock + 开机自启机制
量化结果:
短信捕获覆盖率:双通道互补,实现 100% 捕获
配置匹配准确率:自动读取手机号匹配,3 秒内完成配置加载
API 校验:保存配置时自动校验飞书/火山云凭证有效性,5 秒内完成校验 + 测试卡片发送
后台存活:前台服务 + 电池优化白名单,实测 7×24 小时稳定运行
三、遇到的难点、坑和解决方案
难点 1:Android 13+ 短信权限变更
问题:Android 13 将 READ_SMS 权限从普通权限升级为受限权限,无法直接申请
解决:改用通知栏监听(SmsNotificationListener)作为主要通道,绕过权限限制,SMS Receiver 作为兜底
难点 2:锁屏状态短信无法捕获
问题:部分厂商 ROM 在锁屏状态下会延迟发送短信广播,导致 SMS Receiver 漏收
解决:实现 SmsNotificationListener 监听通知栏,配合 WakeUpService 锁屏全屏弹出,确保不遗漏