关于播放器锁屏图片不显示问题

其实参考 官方的例子是没有问题的,但是因为我做了些改动,而且因为对相关api的不熟悉,所以才会不显示,这儿只是记录下解决问题的过程。
正常通知栏是没有问题的,但是锁屏后图片无法展示,暂停和previous和next按钮也是正常的。
开始没太了解,不知道具体这个锁屏是如何控制和展现的,搜了一下资料发现有提到
默认情况下,Android 5.0 的 notification 会在用户的锁屏界面展示
这么一句,debug后发现还真是,因为previous和next和暂停、播放的事件响应都是在Notification中控制的。
那锁屏的图片也就是Notification中的setLargeIcon setSmallIcon 控制的咯?
因为播放是参考着 https://github.com/googlesamples/android-UniversalMusicPlayer 这个例子来写的,但是因为要适配国内的rom,所以通知栏的样式用RemoteView来定制,而不是采用系统的样式。我发现例子中的锁屏图片是可以的,所以我这时候想到 也许是因为RemoteView的原因 (这时候思路已经错了,浪费了很长时间,我不断的用RemoteView+Lock+Screen来搜索问题,结果发现都是没用的),那到底是为什么呢?
我在Notification中将RemoteView去掉,我发现还是展示不出来,我靠,我的思路错了!与RemoteView没有毛线关系。
这时候我用 UniversalMusicPlayer 的例子测试发现,无论我怎么修改 setSmallIcon setLargeIcon ,锁屏图片仍然会正常展现!奇了怪哉!不是说好的是Notification在锁屏的时候展现吗!
我对比了我的代码和demo中的代码发现,因为要保存到数据库的原因,我没用 MediaMetadataCompat 而是新建了一个类,在保存的时候丢掉了key为 METADATA_KEY_ALBUM_ART_URI的一个属性,测试了下,还真就是这个属性决定了锁屏的图片。但是搜索之后并没有用到它啊!(这时候我就抑郁了,但其实还是与它没有关系,或者说最关键的点还没找到)
继续看demo的代码, MusicProvider类中有个getMusic方法,播放和锁屏肯定是用到了它,那我就挨个找用到它的方法,在QueueManager中我找到了,updateMetadata方法中有这么一段

看updateMusicArt方法,
更新了列表中某个MediaMetadataCompat对象,存进去了两个bitmap!这两个bitmap就是锁屏图片和图标!咦,这个 METADATA_KEY_ALBUM_ART和上面的那个属性很相似啊!
存进去之后调用 mListener. onMetadataChanged(musicMedia);这一句,其实就是重新给 MediaSession中的MediaMetadata赋值,加入刚才存进去的bitmap。
所以,锁屏中显示的是MediaSession中的MediaMetadata!!!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值