android music player实现一个可随机/顺序播放的可加载专辑图片的音频播放器(MediaPlayer)

本文介绍了如何在Android上实现一个音乐播放器,涵盖媒体交互框架、播放模式(包括单曲循环、整体循环、随机和顺序播放)、ViewPager切换歌曲、页面下滑关闭以及加载音频专辑图片等功能。详细讨论了服务端和客户端的消息交互,以及在不同场景下的实现策略。
摘要由CSDN通过智能技术生成


文章来自: http://blog.csdn.net/intbird 转载请说明出处

1. 媒体交互框架

Android媒体框架: https://developer.android.com/guide/topics/media-apps/audio-app/building-an-audio-app
https://developer.android.com/guide/topics/media-apps/images/audio-activity-and-service.png

    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation "com.android.support:support-media-compat:28.0.0"

1. 服务端

媒体播放资源提供端

  • MediaBrowserServiceCompat
  • onGetRoot
  • onLoadChildren
  • MediaSessionCompat
  • MediaSessionCompat.Token
  • MediaSessionCompat.Callback
  • MediaControllerCompat
  • MediaControllerCompat.Callback
  • PlaybackStateCompat.Builder
  • MediaPlayer

实际播放器,基于接口可被替换

2. 客户端

展示媒体进度和控制播放状态

  • MediaBrowserCompat.ConnectionCallback
  • MediaControllerCompat.Callback
  • MediaBrowserCompat.SubscriptionCallback

3. 两端消息交互

  1. 服务端通知客户端:

mSession.sendSessionEvent(“error_index”, bundle);

  1. 客户端通知服务端:

mediaControllerCompat.getTransportControls().sendCustomAction(“play_index”,bundle);

2. 播放模式

1. 单曲循环和整体循环

1.单曲循环 PlaybackStateCompat.REPEAT_MODE_ONE
2.整体循环 PlaybackStateCompat.REPEAT_MODE_ALL
3.不做循环 PlaybackStateCompat.REPEAT_MODE_NONE

2. 随机播放和顺序播放

  1. 随机播放是否允许再次播放 顺序播放已播放过的内容
  2. 顺序播放是否允许再次播放 随机播放已播放过的内容
  3. 随机播放顺序播放 都是播放队列不循环播放模式

3. 几个问题:

1. 合并播放模式

一般 顺序播放/随机播放/单曲循环/列表循环 是在一个按钮上做来回切换
但是getRepeatMode 和 getShuffleMode是两个模式, 简单做下同步

单曲循环 = controllerCompat.getRepeatMode() == PlaybackStateCompat.REPEAT_MODE_ONE 
          && controllerCompat.getShuffleMode() == PlaybackStateCompat.SHUFFLE_MODE_NONE

if (单曲循环) { 
      controllerCompat.getTransportControls().setShuffleMode(PlaybackStateCompat.SHUFFLE_MODE_NONE);
      controllerCompat.getTransportControls().setRepeatMode(PlaybackStateCompat.REPEAT_MODE_ONE);
}  

点击按钮循环模式切换和应用
shuffleIndex = (++shuffleIndex % shuffleConfigMapSize);

点击按钮切换的配置列表
 private void defaultShuffleConfig(MediaCont
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值