jrfeng / snow

Android music player framework, compatible with MediaSession. Support custom music player (MediaPlayer, ExoPlayer), custom Notification, custom audio effect engine, only WiFi network, sound quality/dynamic URL, headset clicks, sleep timer, playback history, player state persistence.
MIT License
190 stars 45 forks source link

Android 13 黑屏音乐过一会就会停止播放 #44

Closed 643063150 closed 3 weeks ago

643063150 commented 1 year ago

手机型号:三星s20国行 系统 Android 13 表现:app在后台时,黑屏一会音乐停止,重新打开app会恢复 app不在后台是只需亮屏就能恢复播放 点击清理消息时还会把音乐的Notification清理掉。。 但是在媒体管理里能看到正在播放的歌曲

643063150 commented 1 year ago

加了前台服务权限后 消息清理不掉了 不过黑屏音乐停止依然存在

643063150 commented 1 year ago

黑屏停止时exoplayer的问题,用mMediaPlayer没有这个问题 可能是setWakeMode有问题吧 加了WAKE_LOCK权限也没用,但是黑屏后不会自动切歌的问题依然存在,给的demo也存在这个问题

jrfeng commented 1 year ago

看起来像是三星限制了 app 的后台运行

643063150 commented 1 year ago

看起来像是三星限制了 app 的后台运行

是的,我写了一个线程池放到mainactivity 轮询服务连接状态,同时监听了PlayPosition 几十秒后 都停止了工作

643063150 commented 1 year ago

看起来像是三星限制了 app 的后台运行

能问下这个自动切歌实在哪里写的吗,找了半天没找到 我试了下加PowerManager后 我写的线程不会被顶了 感觉在切歌的地方加一个唤醒锁应该也能解决

jrfeng commented 1 year ago

唤醒锁确实有个 BUG,我会修复的

jrfeng commented 1 year ago

已经尝试修复了,可以测试一下

643063150 commented 1 year ago

已经尝试修复了,可以测试一下 还是还不行 奇怪的是谷歌用MediaSession框架写的音乐实例没有这个问题,而且仅仅加了WAKE_LOCK权限,没有用到线程锁,snow项目的表现是虽然不能自动切歌了但是可以手动切歌 我是试了下三星s9 系统为Android10 没有这个问题 ,我debug了一下 发现歌曲播放完的监听是能获取到的,但是skipToNext()方法里的mLoadingPlaylist值在锁屏后系统似乎无法获取到当前的值 就一直卡在这里,开屏重新打开app后瞬间获取到mLoadingPlaylist的值然后跳转到下一曲 具体过程如下: caogous 方法释放后并没有继续走下去,开屏打开app后才继续走了下去

643063150 commented 1 year ago

另外,mLoadingPlaylist在调试中最终的结果是false

643063150 commented 1 year ago

已经尝试修复了,可以测试一下 屏蔽此段方法后锁屏自动切歌恢复正常,应该是这个值锁屏后无法获取了 if (mLoadingPlaylist) { mPlaylistLoadedAction = new Runnable() { @Override public void run() { skipToNext(); } }; return; } image

643063150 commented 1 year ago

已经尝试修复了,可以测试一下

🤣后台播放搞定了 又突然出现一个很搞得问题
caogous 通知栏得上一曲不见了,卸载重装都没用 突然出现的 原因是啥都不知道🤣

jrfeng commented 1 year ago

覆盖 MediaNotificationView 类的 onBuildMediaStyle() 方法,并在该方法则调用 MediaStylesetShowActionsInCompactView(int[] actions) 方法进行配置。

643063150 commented 1 year ago

覆盖 MediaNotificationView 类的 onBuildMediaStyle() 方法,并在该方法则调用 MediaStylesetShowActionsInCompactView(int[] actions) 方法进行配置。

应该是三星独有的bug s9上会这样 s20又不会这样 很多品牌的手机都试了 后台播放 通知栏都是正常的 就刚好我用的三星 就遇到了🤣 不过那个后台播放确实会被mLoadingPlaylist卡住 屏蔽判断后就正常

jrfeng commented 1 year ago

这不是 BUG,按照自己需求配置就行。第三方厂商和 Google 经常修改媒体播放器通知的样式,不同手机上外观有些许差别很正常。

643063150 commented 1 year ago

这不是 BUG,按照自己需求配置就行。第三方厂商和 Google 经常修改媒体播放器通知的样式,不同手机上外观有些许差别很正常。

怎么说呢 前两天还好好的 甚至上午还好好的 有上一曲的按钮 下午突然就没了 关键是我写了两套 一个有上一曲一个没有 就是感觉很神奇 不过也懒得找原因了 对使用几乎没啥影响