给比亚迪车机DiLink3.0/4.0开发的音乐暂停器。
- Kotlin 100%
|
|
||
|---|---|---|
| app | ||
| gradle/wrapper | ||
| .gitignore | ||
| build.gradle | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| keystore.properties.example | ||
| README.md | ||
| settings.gradle | ||
音乐暂停器 (MusicPauser)
一个简单的 Android 应用,用于在设备上快捷控制音乐播放/暂停,以及上一首/下一首。
主要解决车机(比亚迪海豚 DiLink 3.0,Android 10)无法通过方向盘按键暂停音乐的痛点:提供悬浮球 / 桌面组件 / 应用内按钮,一键播放/暂停。
功能特性
- 播放控制:播放/暂停、上一首、下一首
- 音乐源识别:识别并显示当前音乐软件(Spotify、QQ音乐、网易云音乐、酷我音乐、酷狗音乐、YouTube Music、Apple Music 等),未知应用显示包名
- 歌曲信息显示:在支持「通知使用权」的设备上显示歌名与歌手
- 桌面组件 (Widget):在支持 Widget 的桌面上添加播放控制组件
- 悬浮球:可拖动、单击播放/暂停、长按打开应用的悬浮按键
- 开机自启:记住悬浮球开关状态,开机自动恢复
- 开机自动播放:可设置开机后自动续播上次的音乐(v1.3,仅车机)
- 双模式:自动适配「通知模式」(有通知权限)与「按键控制模式」(Android 10 及以下 / 无通知权限)
工作原理
通知模式(Android 11+,如手机)
通过「通知使用权」读取音乐 App 的媒体通知,获取歌曲信息与播放状态,并触发其通知栏的播放/暂停/上一首/下一首动作来实现控制。
按键控制模式(Android 10 及以下,如比亚迪车机)
车机系统屏蔽了「通知使用权」设置,无法读取通知。此时使用系统级接口 AudioManager.dispatchMediaKeyEvent() 发送「媒体按键」事件(等同于按实体播放/暂停键),由系统路由给当前活跃的媒体会话(例如最后一个播放的 Spotify),从而实现播放/暂停/切歌。此模式下无法显示歌曲信息。
Android 11 起该接口被移除,因此按键控制模式仅适用于 Android 10 及以下。
兼容性
| 设备 | 系统 | 模式 |
|---|---|---|
| 红米 K70 | HyperOS (Android 14/15) | 通知模式 |
| 比亚迪海豚 2021 款 DiLink 3.0 | Android 10 (API 29) | 按键控制模式 |
- minSdk 26 (Android 8.0)
- targetSdk 33
构建
环境要求:
- JDK 17
- Android SDK(
platforms;android-33、build-tools;33.0.2) - Gradle 7.6.4(项目已包含 wrapper)
# 配置 SDK 路径(按需修改)
echo "sdk.dir=/path/to/android-sdk" > local.properties
# 编译 release APK
./gradlew assembleRelease
产物位于 app/build/outputs/apk/release/app-release.apk。
签名
release 构建使用 keystore/musicpauser.jks 自动签名(别名/密码见 app/build.gradle)。
⚠️ 该 keystore 是应用升级用的唯一签名凭证,请妥善保管。提交到公开仓库前建议将其加入
.gitignore,并改用更安全的密码管理方式。
安装与使用
- 安装 APK
- 打开应用:
- 手机:点击「授予通知使用权」,开启本应用的通知权限
- 车机:无需通知权限,自动进入「按键控制模式」
- 音乐开始播放后,应用内按钮、桌面组件、悬浮球即可控制
悬浮球
- 应用内点击「启用悬浮按键」,按提示授权「悬浮窗」权限
- 单击悬浮球 = 播放/暂停,长按 = 打开应用,拖动 = 移动位置
- 开启后熄火重开机,悬浮球会自动恢复(需允许应用「开机自启」)
车机若无法打开「悬浮窗」权限设置页,可用 ADB 授权:
adb shell appops set com.musicpauser SYSTEM_ALERT_WINDOW allow
开机自动播放
- 主界面打开「开机自动播放音乐」开关
- 需同时满足:已开启「悬浮按键」且允许「开机自启」
- 原理:记录「本次用车期间是否出现过播放」(粘性,暂停不会清除),开机并显示悬浮球后延迟 2 秒发送「播放」键,由系统路由给上次的媒体 App(如 Spotify)续播
- 仅对车机(按键控制模式)有效,手机 Android 11+ 无此接口
权限说明
| 权限 | 用途 |
|---|---|
SYSTEM_ALERT_WINDOW |
悬浮球 |
RECEIVE_BOOT_COMPLETED |
开机自启 |
FOREGROUND_SERVICE |
悬浮球前台服务 |
MODIFY_AUDIO_SETTINGS |
部分系统音频操作(防御性声明) |
项目结构
app/src/main/kotlin/com/musicpauser/
├── MainActivity.kt # 主界面
├── PlaybackManager.kt # 核心状态机 / 控制逻辑
├── MusicNotificationListener.kt # 通知监听(通知模式)
├── PlayPauseWidgetProvider.kt # 桌面组件
├── OverlayService.kt # 悬浮球
├── BootReceiver.kt # 开机自启
└── Prefs.kt # 状态持久化
变更记录 (Changelog)
v1.4
- 悬浮球位置记忆:拖动后自动保存位置,重新开启或重启后恢复到上次位置
v1.3
- 新增「开机自动播放」开关:开机后自动续播上次的音乐(仅车机,需配合开机自启)
v1.2
- 悬浮球状态持久化 + 开机自启:熄火重开机后自动恢复悬浮球
v1.1
- 新增上一首/下一首、歌名/歌手显示、当前音乐源识别
- 新增按键控制模式(Android 10 车机适配)
- 新增悬浮球(悬浮按键)
- 播放/暂停键绿色/黄色状态切换
- 修复 Widget 点击进入 App 的问题
v1.0
- 初始版本:通知模式下控制播放/暂停,桌面组件,音乐源识别
版权
© 2026 developed by hellodk.cn & DeepSeek