Skip to content

awrff/quick-notification

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Quick Notification

Quick Notification - 跨平台短信转发

一个跨平台短信转发应用,支持安卓端自动捕获短信并转发到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"
}

PC端技术栈

  • 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: 深色/浅色主题支持

安装和使用

PC端

环境要求

  • 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

安装步骤

  1. 用 Android Studio 打开 mobile 目录
  2. 等待 Gradle 同步完成
  3. 连接安卓手机(开启USB调试)或启动模拟器
  4. 点击 Run 按钮安装应用
  5. 授予应用所需的权限:
    • 短信权限 (RECEIVE_SMS, READ_SMS)
    • 网络权限 (INTERNET, ACCESS_NETWORK_STATE)
    • 通知权限 (POST_NOTIFICATIONS,Android 13+)

连接配置

  1. 确保设备在同一网络

    • PC和安卓手机连接到同一个WiFi网络
  2. 自动扫描服务器

    • 打开"Quick Notification"应用
    • 主界面显示连接状态和连接按钮
    • 点击右上角日志按钮可查看消息日志
    • 点击圆形连接按钮
    • 应用会自动搜索局域网内的PC服务器
    • 找到服务器后会自动连接
    • 状态显示"已连接"表示成功
  3. 测试转发

    • 向安卓手机发送一条短信
    • 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端打包

使用 Android Studio 构建 APK:

  1. 用 Android Studio 打开 mobile 目录
  2. 等待 Gradle 同步完成
  3. 菜单:Build → Build Bundle(s) / APK(s) → Build APK(s)
  4. APK 生成在 mobile/app/build/outputs/apk/debug/

功能特性

PC端

  • WebSocket服务器,随机分配端口
  • UDP广播端口号,自动发现
  • 现代GUI界面,支持深色/浅色主题
  • 实时显示短信(发送者、内容、时间戳)
  • 消息计数统计
  • 清空消息功能
  • 设备连接状态显示
  • 弹窗通知(可配置)
  • 自动复制到剪贴板(可配置)
  • 系统托盘支持(可配置最小化到托盘)
  • 短信持久化存储(30天循环)
  • 消息卡片悬浮操作(复制/删除)
  • 最新消息置顶显示
  • 短信过滤功能
    • 内嵌规则:一次性验证码自动识别
    • 自定义规则:支持关键字和正则表达式
    • 规则管理:启用/禁用、增删改
    • 拷贝规则:可自定义复制内容(如仅复制验证码)

安卓端

  • 后台服务持续运行
  • 自动监听系统短信
  • UDP广播接收,自动发现PC服务器
  • WebSocket连接管理
  • 前台服务通知
  • 消息日志弹窗显示
  • 日志复制功能
  • 连接重试机制(最多3次)
  • 主动断开不自动重连
  • 深色/浅色主题自适应
  • 未连接时丢弃消息(不缓存)
  • 后台运行支持(忽略电池优化)

设置选项

PC端设置

选项 说明
退出到托盘 关闭窗口时最小化到系统托盘而非退出
启用弹窗通知 收到短信时在屏幕右下角弹出通知窗口
自动复制 收到短信时自动复制内容到剪贴板
保存短信 保存短信记录到本地(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 请求忽略电池优化

电池优化设置

为确保应用在后台稳定运行,建议在手机设置中关闭电池优化:

  1. 打开手机设置 → 应用管理 → Quick Notification
  2. 找到"电池"或"耗电管理"选项
  3. 选择"无限制"或关闭电池优化

通知类短信权限(验证码短信)

部分手机厂商(如小米MIUI、华为EMUI等)默认禁止应用接收通知类短信(验证码),需要手动开启:

  1. 点击应用右上角设置按钮进入应用设置
  2. 找到"权限"或"短信权限"选项
  3. 开启"接收通知类短信"或类似选项

常见问题

Q: 安卓端无法找到PC服务器?

  1. 检查PC和手机是否在同一局域网
  2. 检查PC防火墙是否允许应用通信
  3. 确认PC端应用已启动

Q: 收到短信但没有转发?

  1. 检查安卓端是否已连接服务器(状态显示"已连接")
  2. 确认已授予短信权限
  3. 确保手机电池优化设置为"无限制"
  4. 确保已开启"通知类短信"权限(部分手机厂商需要)
  5. 查看安卓端消息日志(点击右上角日志按钮)
  6. 注意:未连接时收到的短信会被丢弃,不会缓存

Q: 连接失败后如何重新连接?

连接失败后按钮会自动恢复为连接状态,点击即可重新扫描

Q: 如何查看历史短信?

PC端默认开启短信保存功能,重启应用后会自动加载历史消息(保留30天)

数据存储

PC端

  • 配置文件: ~/.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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors