FazBrowse GitHub Viewer | Trending |
URL:
| Home
Tools: [Download Repo ZIP]   [Original HTTPS Page]

fix(android): 增强原生播放器与系统媒体控件的交互体验 by Shomi-FJS · Pull Request #14 · SPlayer-Dev/SPlayer-for-Android · GitHub

fix(android): 增强原生播放器与系统媒体控件的交互体验 - #14

Merged
Re-BeiChen merged 1 commit into
SPlayer-Dev:devfrom
Shomi-FJS:dev
May 8, 2026
Merged

fix(android): 增强原生播放器与系统媒体控件的交互体验#14
Re-BeiChen merged 1 commit into
SPlayer-Dev:devfrom
Shomi-FJS:dev

Conversation

Copy link
Copy Markdown

📌 变更类型

  • ✨ feat — 新功能
  • 🐞 fix — Bug 修复
  • 🎨 style — 仅样式 / 格式,不影响逻辑
  • ♻️ refactor — 重构,不改变外部行为
  • ⚡ perf — 性能优化
  • 📝 docs — 仅文档
  • 🧪 test — 新增 / 修改测试
  • 🔧 chore — 构建 / 脚本 / 依赖
  • 🚀 ci — 仅 CI 配置
  • ⏪ revert — 回滚

📝 变更说明

本 PR 修复 Android 系统媒体控制栏、锁屏、蓝牙和 Android Auto 场景下的播放控制与元信息同步问题。

主要变更:

  • 使用 ForwardingPlayer 接管 MediaSession 上下首命令,避免 ExoPlayer 单项队列下系统媒体面板按钮置灰或点击无响应。
  • 为 native 下一首快路径增加同步锁与 5 秒超时释放,避免 JS 异常路径未同步队列时导致快路径永久卡住。
  • 新增 Android native cleanup 接口,在清空播放列表时同步清理 MediaItem、通知栏、queuedNext 缓存和快路径状态。
  • 同步 MediaMetadata 的真实时长与封面数据,改善锁屏、系统媒体面板、蓝牙和 Android Auto 的歌曲信息显示。
  • 将封面 JPEG 编码结果缓存化,并放到后台线程执行,减少主线程重复压缩导致的卡顿。
  • 支持 authoritative progress 事件,修复系统媒体面板 seek 后 JS 端进度估算基准未刷新、导致界面进度不同步的问题。

这些改动主要解决 Android 原生媒体入口与 JS 播放状态之间不同步的问题,提升后台、锁屏、通知栏和外部媒体控制设备上的播放体验。

🔗 关联 Issue

Closes #

📱 影响范围

  • 🎵 播放引擎 / 音频
  • 📝 歌词 / 桌面歌词
  • 🔔 通知栏 / MediaSession
  • 🌐 在线音乐 (网易云 / Jellyfin / Navidrome / Emby / Subsonic / Last.fm)
  • 🧩 内置 API (nodejs-mobile)
  • 🎨 UI / 主题 / 布局
  • 📦 构建 / 打包 / 签名
  • 📱 Capacitor / 原生 Android 代码
  • 📄 文档 / README

✅ 自检清单

  • 本 PR 目标分支为 master
  • 本地已执行 pnpm lint 且无 warning
  • 本地已执行 pnpm typecheck 且无报错
  • 已在 至少一台真机 上构建并验证关键路径
  • UI 改动已兼顾 手机竖屏 + 平板横屏 两种布局
  • 新增 / 修改的文案使用中文,与项目整体风格一致
  • 未引入不必要的依赖 / 大体积资源
  • 未修改签名密钥 / CI Secrets 相关文件

说明:

  • 本 PR 不涉及 UI 布局改动。
  • typecheck 尚未在本次提交后确认执行,如提交前已执行可再勾选。
  • 请确认 PR 目标分支是否为 master 后再勾选第一项。

📸 截图 / 录屏 (UI 类 PR 必填)

本 PR 不涉及 UI 布局改动。

| 改动前 | 改动后 |

🧪 测试方式

  1. 播放任意歌曲,分别在应用内、通知栏、锁屏媒体控制栏点击上一首 / 下一首,确认事件能正常触发且播放状态同步。
  2. 在只有单个 native MediaItem 的情况下,确认系统媒体面板上一首 / 下一首按钮不会异常置灰或点击无响应。
  3. 在后台或锁屏状态下连续点击下一首,确认不会出现 native 与 JS 双线推进导致的跳歌抖动。
  4. 清空播放列表或退出播放场景后,确认通知栏媒体卡片、native 队列和 queuedNext 缓存被正确清理。
  5. 使用系统媒体面板或锁屏进度条拖动播放进度,确认应用内进度条能立即同步到新的 seek 位置。
  6. 播放带封面的歌曲,确认锁屏、通知栏、蓝牙或 Android Auto 中的标题、时长和封面显示正常。

💬 其他说明 (选填)

本次改动主要集中在 Android 原生播放桥接与 MediaSession 行为,风险点包括:

  • 不同 Android 版本或厂商系统媒体面板对 MediaSession 命令可用性的缓存行为可能不同。
  • 蓝牙设备和 Android Auto 对 MediaMetadata.artworkData 的展示策略可能存在差异。
  • native 下一首快路径依赖 JS 后续通过队列上下文同步状态,因此增加了 5 秒超时兜底,避免异常路径下状态永久锁定。

后续如果仍发现特定设备上媒体按钮状态异常,可结合对应设备的 MediaSession 日志继续补充兼容处理。

- 使用 ForwardingPlayer 接管 MediaSession 上下首命令,避免单项队列下系统媒体面板按钮置灰或点击无响应
- 为 native 下一首快路径增加同步锁与 5s 超时释放,避免 JS 异常路径导致快路径永久卡住
- 新增 Android native cleanup 接口,清空播放列表时同步清理 MediaItem、通知栏和 queuedNext 缓存
- 同步 MediaMetadata 的时长与封面数据,改善锁屏、系统媒体面板、蓝牙和 Android Auto 显示
- 将封面 JPEG 编码缓存化并放到后台线程执行,减少主线程卡顿
- 支持 authoritative progress 事件,修复系统媒体面板 seek 后 JS 进度估算不同步
Re-BeiChen merged commit c92018a into SPlayer-Dev:dev May 8, 2026

Copy link
Copy Markdown

Vip can't be played

This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants


Back | FazBrowse Home | New Git URL