Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Try add bluetooth lyric but not work #615

Closed
wants to merge 2 commits into from
Closed

Conversation

sibojia
Copy link

@sibojia sibojia commented Oct 28, 2024

您好,日常使用中非常希望app能有车载蓝牙歌词功能,repo的issue中也有人多次提到。我对于安卓开发和react开发都不熟,根据互联网资料试图添加蓝牙歌词功能。
目前我是借用了桌面歌词里的LyricPlayer核心逻辑,试图对于每一行歌词更新到蓝牙播放器中,方法上:

  1. 很多网上资料比如 这里这里 都提到使用MediaSession的updateMetadata来实现,先开始直接在Java部分调用
  2. 后来发现 react-native-track-player 内部已经包含了对安卓MediaSession的管理,再创建新的MediaSession有可能有问题,就改为调用它的 TrackPlayer.updateNowPlayingMetadata 函数,这个也是目前这个PR里的代码内容

以上两个版本,在Android Studio中,配合 bumble 在模拟器中调试,都可以正常更新歌词。
image
但是在实际的一辆车上测试,都没有效果,实际表现是一首歌刚开始播放时的第一行歌词能更新,后续就一直不更新了。抓取蓝牙HCI包,并与能正常更新歌词的App比较,发现是Host端没有发送一条TrackChanged消息,应该还是安卓相关代码的问题。
20241028-172128

我后来注意到您使用的是fork并修改过的 react-native-track-player,看来应该也非常了解其中安卓部分的处理。所以想提一下PR,请您帮忙看一下,是否有哪里的实现有问题,有何其他建议。

@lyswhut
Copy link
Owner

lyswhut commented Oct 28, 2024

大概看了下,其实就是将通知栏的歌曲标题改为歌词,歌手改为标题加歌手


但是在实际的一辆车上测试,都没有效果,实际表现是一首歌刚开始播放时的第一行歌词能更新,后续就一直不更新了。抓取蓝牙HCI包,并与能正常更新歌词的App比较,发现是Host端没有发送一条TrackChanged消息,应该还是安卓相关代码的问题。

如果手机处于亮屏状态,是否可以正常播放歌词?

@sibojia
Copy link
Author

sibojia commented Oct 29, 2024

是的,安卓应该是会自动把这个歌曲信息同步到通知栏以及蓝牙播放器。观察QQ音乐等播放器,在打开蓝牙歌词并且连接车载的时候,通知栏的歌曲信息也会变化。

对亮屏的时候也不行

@lyswhut
Copy link
Owner

lyswhut commented Oct 31, 2024

这个我后面有时间会看看

lyswhut added a commit that referenced this pull request Nov 2, 2024
@lyswhut
Copy link
Owner

lyswhut commented Nov 2, 2024

花了一天时间,加了蓝牙歌词支持,可以去 设置-播放设置-显示蓝牙歌词 启用,没在车上测试过,不知道是否可用
可以去 actions 下载最新测试版试试

@sibojia
Copy link
Author

sibojia commented Nov 6, 2024

花了一天时间,加了蓝牙歌词支持,可以去 设置-播放设置-显示蓝牙歌词 启用,没在车上测试过,不知道是否可用 可以去 actions 下载最新测试版试试

感谢!早上在车上试了没问题,打开歌词可以显示,暂停或者关闭歌词开关可以恢复原歌曲信息显示。

请教一下看到您在发送信息的时候是新增了updateNowPlayingTitles,在react-native-track-player里同样是最终调用session.setMetadata,为啥用updateNowPlayingMetadata就不行,没想明白……

@sibojia sibojia closed this Nov 6, 2024
@lyswhut
Copy link
Owner

lyswhut commented Nov 6, 2024

请教一下看到您在发送信息的时候是新增了updateNowPlayingTitles,在react-native-track-player里同样是最终调用session.setMetadata,为啥用updateNowPlayingMetadata就不行,没想明白……

应该可以,你可以在dev分支将 updateNowPlayingTitles 替换成 updateNowPlayingMetadata 试试,只是这个会更新通知栏,并且安卓对通知栏的更新频率有限制。

@sibojia
Copy link
Author

sibojia commented Nov 7, 2024

请教一下看到您在发送信息的时候是新增了updateNowPlayingTitles,在react-native-track-player里同样是最终调用session.setMetadata,为啥用updateNowPlayingMetadata就不行,没想明白……

应该可以,你可以在dev分支将 updateNowPlayingTitles 替换成 updateNowPlayingMetadata 试试,只是这个会更新通知栏,并且安卓对通知栏的更新频率有限制。

我一开始的PR就是用的updateNowPlayingMetadata但是不行,费解……anyway还是非常感谢!

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.

2 participants