静默守护 — Android 短信、位置与监护告警助手
SilentGuard 是一个开源的 Android 个人设备记录与监护告警助手。应用在用户授权后记录短信、位置轨迹和邮件发送状态,并按配置发送到指定邮箱,适用于个人设备管理、老人儿童监护、家庭设备协助等场景。
- 短信记录 — 在用户授权后记录收到的短信,并发送邮件提醒
- 位置记录 — 按设定间隔定时获取坐标,支持高精度/省电定位模式
- 异常未定位告警 — 连续超过阈值无法成功获取定位时发送邮件提醒,辅助发现权限、后台运行或定位服务异常
- 一键求助 — 首页 SOS 按钮可立即发送当前位置、设备型号、时间和地图链接到监护邮箱
- 低电量提醒 — 定位轮询时顺带检查电量,低于 10% 自动发送邮件提醒,避免设备关机后失联
- 每日位置汇总 — 每天 23:59 自动发送当天轨迹汇总,即使当天没有新轨迹点也会发送状态邮件
- 智能省电 — 设备静止时自动延长定位间隔(最大2倍),移动时立即恢复;夜间自动切换低功耗定位
- 轨迹地图 — 轨迹页打开时可立即记录当前位置,并自动定位到最新轨迹点
- 位置去重 — 新位置与最近记录距离不足 100 米时自动跳过,减少重复数据
- 地图邮件 — 配置高德 Web API Key 后,位置邮件包含静态地图、路径标记和地址信息
- 设备识别 — 位置邮件、告警邮件和求助邮件标题包含手机品牌与型号,便于多设备区分
- 发送记录 — 记录邮件发送成功/失败状态,可在记录页按类型筛选查看
- 后台保活 — 多重保活机制(前台服务 + AlarmManager 兜底 + onTaskRemoved 重启 + 开机自启)
- 国产 ROM 适配 — 首次开启守护时自动引导用户开启自启动、电池优化白名单等系统设置
- 自动保存配置 — 设置页编辑后自动持久化,无需额外点击保存按钮
- 加密存储 — SMTP 授权码和高德 Web API Key 使用 EncryptedSharedPreferences 加密
- 可靠投递 — 邮件发送失败自动重试(WorkManager + 指数退避)
- 通知读取兼容方案 — 国产 ROM 无法授予短信权限时,可通过通知使用权读取短信通知
- 协议兼容 — 同时支持 SSL (465) 和 STARTTLS (587) 加密协议
| 组件 | 技术 |
|---|---|
| 语言 | Kotlin |
| UI | Jetpack Compose + Material3 |
| 后台 | Foreground Service |
| 定位 | Google Play Services FusedLocationProvider(轨迹页含系统定位兼容方案) |
| 地图 | 高德地图 SDK |
| 地图邮件 | 高德 Web 服务静态地图 + 逆地理编码 |
| 邮件 | Jakarta Mail (SMTP over SSL/STARTTLS, HTML/Text) |
| 任务调度 | WorkManager |
| 数据库 | Room |
| 持久化 | DataStore + EncryptedSharedPreferences |
| 最低版本 | Android 8.0 (API 26) |
前往 Releases 页面下载最新的 APK 文件,传输到 Android 手机上直接安装。
需要在手机设置中允许「安装未知应用」。最低支持 Android 8.0。
- Android Studio (推荐) 或 JDK 17+
- Android SDK 34
git clone https://github.com/xzygis/silentguard.git
cd silentguard
./gradlew assembleDebugAPK 输出路径:app/build/outputs/apk/debug/silentguard-{版本号}.apk
📖 详细构建指南
- 下载并安装 Android Studio(自带 JDK 和 SDK)
- 首次启动按向导完成 SDK 安装(确保安装 Android SDK 34)
- File → Open → 选择
silentguard文件夹 → 等待 Gradle 同步完成 - Build → Build Bundle(s) / APK(s) → Build APK(s) 生成 Debug APK
- USB 连接手机(开启 USB 调试),点击
▶️ 运行按钮安装
# 设置 ANDROID_HOME 环境变量
export ANDROID_HOME=$HOME/Library/Android/sdk # macOS
# export ANDROID_HOME=$HOME/Android/Sdk # Linux
# 构建
./gradlew assembleDebug
# 安装到手机
adb install app/build/outputs/apk/debug/silentguard-{版本号}.apk| 问题 | 解决方案 |
|---|---|
| Gradle 同步失败 | 检查网络;国内用户建议配置 Gradle 镜像 |
SDK location not found |
创建 local.properties,写入 sdk.dir=/你的SDK路径 |
JAVA_HOME is not set |
安装 JDK 17+ 并设置 JAVA_HOME |
- 安装并打开应用,授予短信、位置、通知等权限
- 填写 SMTP 邮件配置(参考下方邮箱设置)和接收邮箱地址
- 设置位置记录间隔、邮件发送间隔和定位精度
- 可选填写高德 Web API Key,用于地图邮件和地址解析
- 点击「发送测试邮件」验证邮件配置和当前位置读取
- 开启「启动守护」开关
- 在首页可使用「一键求助」立即发送当前位置到监护邮箱
- 在「记录」页查看短信、位置和邮件发送状态;在「轨迹」页查看位置轨迹
📧 邮箱 SMTP 配置指引
| 邮箱 | SMTP 服务器 | 端口 | 备注 |
|---|---|---|---|
| QQ 邮箱 | smtp.qq.com | 465 | 需要使用授权码(非登录密码) |
| 163 邮箱 | smtp.163.com | 465 | 需要使用授权码 |
| Gmail | smtp.gmail.com | 465 | 需要开启"应用专用密码" |
| Outlook | smtp.office365.com | 587 | 需要开启"应用密码" |
| 飞书邮箱 | smtp.feishu.cn | 465 | 直接使用邮箱密码 |
| 阿里企业邮箱 | smtp.qiye.aliyun.com | 465 | 直接使用邮箱密码 |
- 登录 QQ 邮箱 网页版
- 设置 → 账户 → 找到「POP3/IMAP/SMTP 服务」
- 开启 IMAP/SMTP 服务(手机验证后获得授权码)
- 登录 163 邮箱 → 设置 → POP3/SMTP/IMAP
- 开启 IMAP/SMTP 服务 → 按提示设置授权码
- 前往 Google 账户安全设置
- 开启 两步验证 → 应用专用密码 → 生成 16 位密码
| 应用字段 | 填写内容 |
|---|---|
| SMTP 服务器 | 参考上表(如 smtp.qq.com) |
| SMTP 端口 | 465(SSL)或 587(STARTTLS) |
| 发送邮箱 | 你的完整邮箱地址 |
| 邮箱授权码 | 上面获取的授权码(不是登录密码) |
| 接收邮箱 | 接收邮件提醒的邮箱 |
填完后点击「发送测试邮件」验证配置。
🗺️ 地图邮件与高德 Key
地图邮件是可选能力。未配置高德 Web API Key 时,位置邮件仍会发送纯文本坐标信息;配置后,邮件会升级为包含静态地图、起终点标记、路径线和地址信息的 HTML 邮件。
- 登录 高德开放平台
- 创建应用,并添加 Web服务 类型 Key
- 将 Key 填入应用设置页的「高德 Web API Key」
| 场景 | 未配置 Key | 已配置 Key |
|---|---|---|
| 测试邮件 | 坐标、精度、定位时间、高德地图链接 | 额外尝试解析地址 |
| 位置记录 | 坐标和 Google Maps 链接 | 额外记录地址摘要 |
| 定时位置邮件 | 纯文本位置列表 | HTML 静态地图 + 路径线 + 地址表格 |
com.xzygis.silentguard/
├── MainActivity.kt # Compose 主界面
├── config/
│ └── AppConfig.kt # 配置管理(加密存储)
├── data/
│ ├── AppDatabase.kt # Room 数据库
│ ├── MonitorEvent.kt # 记录事件实体
│ ├── MonitorEventDao.kt # 记录事件数据访问对象
│ ├── MailSendRecord.kt # 邮件发送记录实体
│ └── MailSendRecordDao.kt # 邮件发送记录数据访问对象
├── location/
│ └── AmapReverseGeocoder.kt # 高德逆地理编码与地址摘要
├── mail/
│ ├── MailSender.kt # SMTP 邮件发送(SSL/STARTTLS)
│ ├── MailWorker.kt # WorkManager 重试调度
│ ├── EmailScheduleWorker.kt # 定时位置邮件任务
│ └── StaticMapUrlBuilder.kt # 高德静态地图 URL 生成
├── service/
│ ├── MonitorForegroundService.kt # 前台服务(位置记录)
│ └── SmsNotificationListenerService.kt # 通知读取兼容方案
├── receiver/
│ ├── SmsReceiver.kt # 短信广播接收
│ ├── BootReceiver.kt # 开机自启动
│ └── ServiceWatchdogReceiver.kt # AlarmManager 兜底服务检查
├── util/
│ └── BackgroundGuideHelper.kt # 国产 ROM 后台保活引导
└── ui/
├── screen/ # 各页面(仪表盘/设置/地图/日志)
├── component/ # 可复用组件
├── navigation/ # 导航定义
└── theme/ # Material3 主题
| 权限 | 用途 |
|---|---|
RECEIVE_SMS / READ_SMS |
读取用户授权的短信 |
ACCESS_FINE_LOCATION / ACCESS_COARSE_LOCATION |
获取 GPS 位置 |
ACCESS_BACKGROUND_LOCATION |
后台持续定位 |
INTERNET |
发送邮件 |
FOREGROUND_SERVICE |
前台服务保活 |
RECEIVE_BOOT_COMPLETED |
开机自启动 |
POST_NOTIFICATIONS |
Android 13+ 通知权限 |
SCHEDULE_EXACT_ALARM |
AlarmManager 兜底唤醒 |
WAKE_LOCK |
定位期间防止 CPU 休眠 |
- 设置页配置会自动保存;SMTP 授权码和高德 Web API Key 以加密方式存储。
- 守护服务采用间歇式定位:每周期执行一次性定位后立即释放 GPS,系统不会显示"持续使用定位"。
- 自适应间隔:设备静止(连续多次位置未变化)时,定位间隔自动翻倍(最大2倍);一旦检测到移动立即恢复正常间隔。
- 静止恢复保护:静止超过 30 分钟会重置定位频率,避免设备移动后长时间无法感知。
- 夜间省电:23:00-6:00 自动切换基站/WiFi 低功耗定位,不启用 GPS,间隔至少 30 分钟。
- 按需 WakeLock:仅在定位执行期间(几秒)持有 CPU 唤醒锁,完成后立即释放。
- 异常未定位告警:服务每 10 分钟检查一次最近成功定位时间,超过
max(定位间隔 × 3, 30分钟)未成功定位时发送邮件,持续异常时最多每 2 小时重复提醒一次。 - 低电量提醒:每次定位轮询后顺带读取系统电池状态,电量低于 10% 时发送邮件;持续低电量时最多每 6 小时重复提醒一次,电量恢复到 15% 后重置提醒状态。
- 位置记录默认执行 100 米距离去重,轨迹页自动记录和后台守护服务都会遵守该规则。
- 位置邮件按「邮件发送间隔」批量发送待发送位置点,成功后标记为已发送;每天 23:59 会额外发送当天位置汇总。
- 记录页支持按「全部 / 短信 / 位置 / 邮件」筛选,邮件页展示每次发送的成功或失败结果。
- 后台保活:前台服务 + START_STICKY + AlarmManager 兜底检查 + onTaskRemoved 自动重启 + WorkManager 周期任务 + 开机自启动。
欢迎贡献!请阅读 贡献指南 了解如何参与。
发现安全漏洞?请参阅 安全策略 了解报告方式。
本项目仅供学习和个人设备管理使用。请确保在使用时遵守当地法律法规,并仅在本人设备或已获得明确授权的设备上使用。未经他人同意安装或收集信息可能违反法律。作者不对任何滥用行为承担责任。
本项目基于 MIT License 开源。
Copyright © 2026 eagle
