收到违停短信时自动全屏响铃 + 震动提醒,即使手机静音也会响。
- 后台短信监听:自动捕获 incoming SMS,无需手动操作
- 关键词匹配:检测"违停""违法停车""违章停车"等关键词(可自定义)
- 全屏闹钟:匹配后弹出红色全屏界面,循环响铃 + 震动
- 锁屏唤醒:手机锁屏时自动亮屏弹出
- 静音穿透:使用 ALARM 音频流,静音模式下也能响
- 返回键拦截:必须点击"停止"才能关闭闹钟,防止误触
ParkingAlarm/
├── app/
│ ├── build.gradle.kts
│ ├── proguard-rules.pro
│ └── src/main/
│ ├── AndroidManifest.xml
│ ├── java/com/parkingalarm/app/
│ │ ├── MainActivity.kt # 主界面:开关、关键词、测试
│ │ ├── SmsReceiver.kt # 短信接收器:监听+关键词匹配
│ │ ├── AlarmActivity.kt # 闹钟界面:响铃+震动+全屏
│ │ ├── BootReceiver.kt # 开机自启
│ │ └── PrefManager.kt # 偏好存储
│ └── res/
│ ├── layout/
│ │ ├── activity_main.xml
│ │ └── activity_alarm.xml
│ ├── values/
│ │ ├── strings.xml
│ │ ├── colors.xml
│ │ └── themes.xml
│ ├── drawable/ # 卡片/按钮/图标
│ ├── mipmap-anydpi-v26/ # 自适应图标
│ └── xml/
│ └── backup_rules.xml
├── build.gradle.kts
├── settings.gradle.kts
├── gradle.properties
└── gradle/wrapper/
└── gradle-wrapper.properties
- 下载安装 Android Studio
- 打开 Android Studio →
File→Open→ 选择ParkingAlarm文件夹 - 等待 Gradle Sync 完成(首次会自动下载依赖)
- 手机开启 USB 调试(设置 → 开发者选项 → USB 调试)
- 用数据线连接电脑
- 点击绿色三角形
Run 'app'按钮,自动编译并安装到手机
# 确保已安装 Android SDK 并设置 ANDROID_HOME
cd ParkingAlarm
# 生成 Debug APK
./gradlew assembleDebug
# APK 输出路径
# app/build/outputs/apk/debug/app-debug.apk
# 通过 adb 安装到手机
adb install app/build/outputs/apk/debug/app-debug.apkRelease 版需要用密钥库签名。密钥库和密码不存放在仓库中,请在项目根目录创建 local.properties(该文件已被 .gitignore 排除)并填入:
# Android SDK 路径
sdk.dir=/path/to/your/android-sdk
# 签名配置
RELEASE_STORE_FILE=release.keystore
RELEASE_STORE_PASSWORD=你的密钥库密码
RELEASE_KEY_ALIAS=你的密钥别名
RELEASE_KEY_PASSWORD=你的密钥密码然后编译:
./gradlew assembleRelease
# 输出:app/build/outputs/apk/release/app-release.apk上述四项也可改用同名环境变量传入,适合 CI 场景,优先级低于
local.properties。若完全未配置签名信息,
assembleRelease仍可正常执行,只是产出未签名 APK。
keytool -genkeypair -v \
-keystore release.keystore \
-alias parkingalarm \
-keyalg RSA -keysize 2048 -validity 10950 \
-dname "CN=ParkingAlarm, OU=Dev, O=Personal, L=Shenzhen, ST=Guangdong, C=CN"
⚠️ 密钥库是 App 的身份凭证:务必妥善保管且不要提交到任何仓库。一旦泄露,他人可以冒用你的身份发布 App 更新。已安装的用户只能被同一密钥签名的包覆盖升级,密钥丢失将导致用户必须卸载重装。
首次打开 App 时会请求短信权限,请点击 允许。
如果误点了拒绝,可以在 设置 → 应用管理 → 违停短信闹钟 → 权限 中手动开启。
国产 ROM 有严格的后台限制,必须额外配置才能保证后台收到短信:
| 品牌 | 设置路径 |
|---|---|
| 小米/MIUI | 设置 → 应用设置 → 应用管理 → 违停短信闹钟 → 自启动=ON, 省电策略=无限制 |
| 华为/EMUI | 设置 → 应用 → 应用启动管理 → 违停短信闹钟 → 手动管理 → 全部开启 |
| OPPO/ColorOS | 设置 → 电池 → 应用耗电管理 → 违停短信闹钟 → 允许后台运行 |
| vivo/OriginOS | 设置 → 电池 → 后台耗电管理 → 违停短信闹钟 → 允许后台高耗电 |
| 三星 | 设置 → 电池和设备维护 → 电池 → 后台使用限制 → 添加例外 |
本 App 不需要设为默认短信应用。它通过 RECEIVE_SMS 权限监听短信广播,
不会拦截或删除短信,你的正常短信收发不受影响。
- 打开 App
- 确认监控开关已开启(默认开启)
- 查看默认关键词列表,按需增删(每行一个关键词)
- 点击 保存关键词
- 点击 测试闹钟效果 可以预览闹钟界面和铃声
- 保持 App 后台运行即可
违停
违法停车
违章停车
违法停放
违规停车
不按规定停车
机动车违反规定停放
你可以添加更多,例如交警短信中常见的其他措辞。
| 项目 | 说明 |
|---|---|
| 最低系统 | Android 8.0 (API 26) |
| 目标系统 | Android 14 (API 34) |
| 语言 | Kotlin |
| 构建 | Gradle 8.2 + AGP 8.1.1 |
| 短信监听 | BroadcastReceiver + Telephony.Sms.Intents.SMS_RECEIVED_ACTION |
| 闹钟铃声 | RingtoneManager.TYPE_ALARM + MediaPlayer (loop) |
| 震动 | Vibrator + VibrationEffect.createWaveform |
| 锁屏唤醒 | setShowWhenLocked + setTurnScreenOn (API 27+) |
| 静音穿透 | AudioManager.STREAM_ALARM |
- 本 App 不上传任何数据,所有短信内容仅在本地处理
- 不读写通讯录、不联网、不含任何第三方 SDK
- 关键词和设置存储在本地 SharedPreferences 中