一个跨平台短信转发应用,支持安卓端自动捕获短信并转发到PC端显示。
quick-notification/
├── pc/ # PC端
│ ├── pyproject.toml # Python项目配置 (uv + hatch)
│ ├── build_pc.py # 打包脚本
│ ├── installer.iss # Inno Setup 安装脚本
│ └── src/sms_receiver/
│ ├── __init__.py # 入口文件
│ ├── app.py # 主应用逻辑
│ ├── config.py # 配置管理和消息存储
│ ├── filter_config.py # 短信过滤规则配置
│ ├── server.py # WebSocket服务器
│ └── ui.py # UI组件
│
├── installer/ # 安装程序输出目录
│ └── QuickNotificationSetup.exe
│
└── mobile/ # 安卓端
├── build.gradle.kts # 根项目配置
├── settings.gradle.kts # 项目设置
├── gradle.properties # Gradle属性
└── app/
├── build.gradle.kts # App模块配置
├── proguard-rules.pro # 混淆规则
└── src/main/
├── AndroidManifest.xml # 清单文件
├── java/com/quicknotification/
│ ├── MainActivity.kt # 主界面 - 服务器扫描和连接
│ ├── SmsReceiver.kt # 短信广播接收器 - 监听系统短信
│ ├── SmsData.kt # 数据模型 - JSON序列化
│ └── WebSocketService.kt # WebSocket前台服务 - 保持连接和转发
└── res/ # 资源文件
├── layout/activity_main.xml
├── drawable/ # 按钮背景和图标
├── values/
│ ├── strings.xml
│ ├── themes.xml
│ └── colors.xml # 亮色模式颜色
└── values-night/
├── themes.xml
└── colors.xml # 深色模式颜色
- WebSocket: 双向实时通信,PC端作为服务器,安卓端作为客户端
- UDP广播: PC端自动广播端口号,安卓端自动发现
- 动态端口: PC端随机分配端口,避免冲突
- 重试机制: 连接失败自动重试,最多3次
- 超时设置: 10秒超时,自动断开无响应连接
{
"sender": "发送者号码",
"content": "短信内容",
"timestamp": "2024-01-01 12:00:00"
}- Python 3.10+: 运行环境
- uv + venv: 包管理和虚拟环境
- websockets: WebSocket服务器实现
- CustomTkinter: 现代GUI框架,支持深色/浅色主题
- pystray: 系统托盘支持
- Pillow: 图标绘制
- Kotlin: 开发语言
- Android SDK 34: 目标SDK
- Java-WebSocket: WebSocket客户端库
- Gson: JSON序列化
- DatagramSocket: UDP广播接收
- Material Design: 深色/浅色主题支持
- Python 3.10+
- uv 包管理器
cd pc
# 创建虚拟环境
uv venv
# 激活虚拟环境 (Windows)
.venv\Scripts\activate
# 激活虚拟环境 (Linux/macOS)
source .venv/bin/activate
# 安装依赖
uv pip install -e .
# 运行应用
quick-notification启动后会显示GUI界面,WebSocket服务器随机分配端口并自动广播。
- Android Studio Hedgehog (2023.1.1) 或更高版本
- JDK 17+
- Android SDK 34
- 用 Android Studio 打开
mobile目录 - 等待 Gradle 同步完成
- 连接安卓手机(开启USB调试)或启动模拟器
- 点击 Run 按钮安装应用
- 授予应用所需的权限:
- 短信权限 (RECEIVE_SMS, READ_SMS)
- 网络权限 (INTERNET, ACCESS_NETWORK_STATE)
- 通知权限 (POST_NOTIFICATIONS,Android 13+)
-
确保设备在同一网络
- PC和安卓手机连接到同一个WiFi网络
-
自动扫描服务器
- 打开"Quick Notification"应用
- 主界面显示连接状态和连接按钮
- 点击右上角日志按钮可查看消息日志
- 点击圆形连接按钮
- 应用会自动搜索局域网内的PC服务器
- 找到服务器后会自动连接
- 状态显示"已连接"表示成功
-
测试转发
- 向安卓手机发送一条短信
- PC端界面会自动显示短信内容
cd pc
# 打包PC端(需要先创建虚拟环境并安装依赖)
python build_pc.py输出文件:
pc/dist/QuickNotification.exe- 可执行文件installer/QuickNotificationSetup.exe- 安装程序
前置条件:
cd pc
uv venv
.venv\Scripts\activate
uv pip install -e .使用 Android Studio 构建 APK:
- 用 Android Studio 打开
mobile目录 - 等待 Gradle 同步完成
- 菜单:Build → Build Bundle(s) / APK(s) → Build APK(s)
- APK 生成在
mobile/app/build/outputs/apk/debug/
- WebSocket服务器,随机分配端口
- UDP广播端口号,自动发现
- 现代GUI界面,支持深色/浅色主题
- 实时显示短信(发送者、内容、时间戳)
- 消息计数统计
- 清空消息功能
- 设备连接状态显示
- 弹窗通知(可配置)
- 自动复制到剪贴板(可配置)
- 系统托盘支持(可配置最小化到托盘)
- 短信持久化存储(30天循环)
- 消息卡片悬浮操作(复制/删除)
- 最新消息置顶显示
- 短信过滤功能
- 内嵌规则:一次性验证码自动识别
- 自定义规则:支持关键字和正则表达式
- 规则管理:启用/禁用、增删改
- 拷贝规则:可自定义复制内容(如仅复制验证码)
- 后台服务持续运行
- 自动监听系统短信
- UDP广播接收,自动发现PC服务器
- WebSocket连接管理
- 前台服务通知
- 消息日志弹窗显示
- 日志复制功能
- 连接重试机制(最多3次)
- 主动断开不自动重连
- 深色/浅色主题自适应
- 未连接时丢弃消息(不缓存)
- 后台运行支持(忽略电池优化)
| 选项 | 说明 |
|---|---|
| 退出到托盘 | 关闭窗口时最小化到系统托盘而非退出 |
| 启用弹窗通知 | 收到短信时在屏幕右下角弹出通知窗口 |
| 自动复制 | 收到短信时自动复制内容到剪贴板 |
| 保存短信 | 保存短信记录到本地(30天循环) |
点击设置按钮旁的过滤按钮可打开过滤设置窗口:
| 功能 | 说明 |
|---|---|
| 启用过滤 | 开启后仅显示符合规则的短信 |
| 内嵌规则 | 系统预设规则,只能启用/禁用,不可删改 |
| 自定义规则 | 用户自定义规则,支持增删改 |
| 过滤规则 | 支持关键字匹配和正则表达式匹配 |
| 拷贝规则 | 整条拷贝或使用正则表达式提取特定内容 |
内嵌规则说明:
- 一次性验证码过滤:自动识别验证码短信,复制时仅复制验证码数字
自定义规则示例:
- 过滤规则:
银行(关键字)- 匹配包含"银行"的短信 - 过滤规则:
订单号[是为::\s]*([A-Z0-9]+)(正则)- 匹配订单号格式 - 拷贝规则:选择"整条拷贝"则复制完整短信内容
- 拷贝规则:选择"正则提取",输入
验证码.*?(\d{6})可从"验证码是:123456"中提取"123456"
| 权限 | 用途 |
|---|---|
| RECEIVE_SMS | 接收系统短信广播 |
| READ_SMS | 读取短信内容 |
| INTERNET | 网络通信 |
| ACCESS_NETWORK_STATE | 网络状态检测 |
| FOREGROUND_SERVICE | 前台服务运行 |
| POST_NOTIFICATIONS | 显示通知 (Android 13+) |
| WAKE_LOCK | 保持CPU唤醒,确保后台运行 |
| REQUEST_IGNORE_BATTERY_OPTIMIZATIONS | 请求忽略电池优化 |
为确保应用在后台稳定运行,建议在手机设置中关闭电池优化:
- 打开手机设置 → 应用管理 → Quick Notification
- 找到"电池"或"耗电管理"选项
- 选择"无限制"或关闭电池优化
部分手机厂商(如小米MIUI、华为EMUI等)默认禁止应用接收通知类短信(验证码),需要手动开启:
- 点击应用右上角设置按钮进入应用设置
- 找到"权限"或"短信权限"选项
- 开启"接收通知类短信"或类似选项
- 检查PC和手机是否在同一局域网
- 检查PC防火墙是否允许应用通信
- 确认PC端应用已启动
- 检查安卓端是否已连接服务器(状态显示"已连接")
- 确认已授予短信权限
- 确保手机电池优化设置为"无限制"
- 确保已开启"通知类短信"权限(部分手机厂商需要)
- 查看安卓端消息日志(点击右上角日志按钮)
- 注意:未连接时收到的短信会被丢弃,不会缓存
连接失败后按钮会自动恢复为连接状态,点击即可重新扫描
PC端默认开启短信保存功能,重启应用后会自动加载历史消息(保留30天)
- 配置文件:
~/.quick-notification/config.json - 消息记录:
~/.quick-notification/messages.json - 过滤规则:
~/.quick-notification/filter-rules.json
{
"minimize_to_tray": false,
"popup_notification": true,
"auto_copy": false,
"save_messages": true
}{
"filter_enabled": false,
"builtin_rules": [
{
"id": "builtin-otp-filter",
"name": "一次性验证码过滤",
"enabled": true,
"is_builtin": true
}
],
"custom_rules": [
{
"id": "custom-rule-id",
"name": "自定义规则",
"filter_pattern": "银行",
"filter_type": "keyword",
"copy_pattern": "",
"copy_type": "full",
"enabled": true,
"is_builtin": false
}
]
}MIT License