给比亚迪车机DiLink3.0/4.0开发的音乐暂停器。
Find a file
dk bbb68aa1c3 悬浮球位置记忆 + 更新 README Changelog (v1.4)
拖动悬浮球后持久化位置,重启/重开恢复到上次位置;README 新增变更记录
2026-09-18 18:51:19 +08:00
app 悬浮球位置记忆 + 更新 README Changelog (v1.4) 2026-09-18 18:51:19 +08:00
gradle/wrapper 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
.gitignore 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
build.gradle 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
gradle.properties 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
gradlew 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
gradlew.bat 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
keystore.properties.example 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00
README.md 悬浮球位置记忆 + 更新 README Changelog (v1.4) 2026-09-18 18:51:19 +08:00
settings.gradle 初始提交:音乐暂停器 v1.2 2026-09-10 17:02:37 +08:00

音乐暂停器 (MusicPauser)

一个简单的 Android 应用,用于在设备上快捷控制音乐播放/暂停,以及上一首/下一首。

主要解决车机(比亚迪海豚 DiLink 3.0Android 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 SDKplatforms;android-33build-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,并改用更安全的密码管理方式。

安装与使用

  1. 安装 APK
  2. 打开应用:
    • 手机:点击「授予通知使用权」,开启本应用的通知权限
    • 车机:无需通知权限,自动进入「按键控制模式」
  3. 音乐开始播放后,应用内按钮、桌面组件、悬浮球即可控制

悬浮球

  • 应用内点击「启用悬浮按键」,按提示授权「悬浮窗」权限
  • 单击悬浮球 = 播放/暂停,长按 = 打开应用,拖动 = 移动位置
  • 开启后熄火重开机,悬浮球会自动恢复(需允许应用「开机自启」)

车机若无法打开「悬浮窗」权限设置页,可用 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