目前只有简单音频播放需求,暂时封装到这样,以后需求变了,再扩展吧
类:

1 import android.media.AudioManager; 2 import android.media.MediaPlayer; 3 import android.support.annotation.FloatRange; 4 import android.support.annotation.NonNull; 5 import android.support.annotation.Nullable; 6 import android.util.Log; 7 8 import java.io.IOException; 9 import java.util.HashMap; 10 import java.util.Map; 11 12 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_COMPLETE; 13 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_ERROR; 14 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_NULL; 15 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_PAUSE; 16 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_PLAYING; 17 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_READY; 18 import static com.xhzxlqt.util.LeesAudioPlayer.Status.STATUS_STOP; 19 20 /* 21 * @author xhzxlqt@163.com 22 * create at 2018/6/13 23 * description: 24 */ 25 public class LeesAudioPlayer { 26 static String TAG="LeesAudioPlayerThread"; 27 MediaPlayer mPlayer=new MediaPlayer(); 28 LeesAudioPlayer _this; 29 float _Volume=0.5f; 30 31 int _currentStatus=STATUS_NULL; 32 33 //使用Map,而不使用固定变量,方便以后扩展Status 34 private Map<Integer,OnStatusChangedListener> listenerMap=new HashMap<Integer,OnStatusChangedListener>(); 35 36 public LeesAudioPlayer(){ 37 _this=this; 38 mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 39 mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 40 41 @Override 42 public void onPrepared(MediaPlayer mp) { 43 setCurrentStatus(STATUS_READY,mp.getDuration()); 44 //region 45 mp.setVolume(_Volume,_Volume); 46 mp.start(); 47 setCurrentStatus(STATUS_PLAYING,null); 48 //endregion 49 } 50 51 }); 52 53 mPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 54 @Override 55 public boolean onError(MediaPlayer mp, int what, int extra) { 56 if(mPlayer.isPlaying()) { 57 mPlayer.stop(); 58 setCurrentStatus(STATUS_STOP,null); 59 } 60 setCurrentStatus(STATUS_ERROR,null); 61 return false; 62 } 63 }); 64 65 mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 66 @Override 67 public void onCompletion(MediaPlayer mp) { 68 //region 69 setCurrentStatus(STATUS_COMPLETE,null); 70 //endregion 71 } 72 }); 73 } 74 /* 75 * 函数功能:播放音频文件 76 * Author: xhzxlqt@163.com 77 * Create: 2018/6/13 20:11 78 * 79 */ 80 public void Play(String sFile) { 81 try { 82 if(mPlayer.isPlaying()){ 83 mPlayer.stop(); 84 setCurrentStatus(STATUS_STOP,null); 85 } 86 mPlayer.reset(); 87 mPlayer.setDataSource(sFile); 88 mPlayer.prepareAsync(); 89 } 90 catch (IOException e){ 91 Log.e(TAG,e.getMessage()); 92 } 93 } 94 /* 95 * 函数功能:设置音量 96 * Author: xhzxlqt@163.com 97 * Create: 2018/6/13 20:17 98 * 99 */ 100 public void setVolume(@FloatRange( from = 0.0f ,to =1.0f) float fVal){ 101 _Volume=fVal; 102 } 103 /* 104 * 函数功能:暂停 105 * Author: xhzxlqt@163.com 106 * Create: 2018/6/13 20:18 107 * 108 */ 109 public void Pause(){ 110 if(mPlayer.isPlaying()){ 111 setCurrentStatus(STATUS_PAUSE,null); 112 mPlayer.pause(); 113 } 114 } 115 /* 116 * 函数功能:恢复播放 117 * Author: xhzxlqt@163.com 118 * Create: 2018/6/13 20:41 119 * 120 */ 121 public void Resume(){ 122 if(_currentStatus==STATUS_PAUSE) { 123 setCurrentStatus(STATUS_PLAYING,null); 124 mPlayer.start(); 125 } 126 } 127 128 /* 129 * 函数功能:设置当前状态,同时调用相应的回调(如果有) 130 * Author: xhzxlqt@163.com 131 * Create: 2018/6/13 20:46 132 * 133 */ 134 private void setCurrentStatus(int nVal,Object obj){ 135 _currentStatus=nVal; 136 if(listenerMap.containsKey(nVal)){ 137 OnStatusChangedListener listener=listenerMap.get(nVal); 138 if(listener!=null){ 139 listener.onStatusChanged(_this, nVal,obj); 140 } 141 } 142 } 143 144 145 public interface Status{ 146 public int STATUS_NULL=0; 147 public int STATUS_READY=1; 148 public int STATUS_PLAYING=2; 149 public int STATUS_PAUSE=3; 150 public int STATUS_COMPLETE=4; 151 public int STATUS_STOP=5; 152 public int STATUS_ERROR=9; 153 } 154 public interface OnStatusChangedListener{ 155 public void onStatusChanged(LeesAudioPlayer lapt, int status, @Nullable Object other); 156 } 157 public LeesAudioPlayer setStatusChangedListener(@NonNull int nStatus, OnStatusChangedListener listener){ 158 listenerMap.put(nStatus,listener); 159 return this; 160 } 161 protected void finalize( ) 162 { 163 if(mPlayer.isPlaying()) 164 mPlayer.stop(); 165 mPlayer.release(); 166 mPlayer=null; 167 } 168 }
调用测试:

1 LeesAudioPlayer mPlayer=new LeesAudioPlayer(); 2 3 4 mPlayer.setStatusChangedListener(LeesAudioPlayer.Status.STATUS_READY, new LeesAudioPlayer.OnStatusChangedListener() { 5 @Override 6 public void onStatusChanged(LeesAudioPlayer lapt, int status, @Nullable Object msg) { 7 onPlayerStatusChanged(lapt,status,msg); 8 } 9 }).setStatusChangedListener(LeesAudioPlayer.Status.STATUS_COMPLETE, new LeesAudioPlayer.OnStatusChangedListener() { 10 @Override 11 public void onStatusChanged(LeesAudioPlayer lapt, int status, @Nullable Object msg) { 12 onPlayerStatusChanged(lapt,status,msg); 13 } 14 }).setStatusChangedListener(LeesAudioPlayer.Status.STATUS_ERROR, new LeesAudioPlayer.OnStatusChangedListener() { 15 @Override 16 public void onStatusChanged(LeesAudioPlayer lapt, int status, @Nullable Object msg) { 17 onPlayerStatusChanged(lapt,status,msg); 18 } 19 }); 20 btn1=(Button)findViewById(R.id.btn_1); 21 btn2=(Button)findViewById(R.id.btn_2); 22 btn1.setOnClickListener(new View.OnClickListener() { 23 @Override 24 public void onClick(View v) { 25 mPlayer.Play("/storage/emulated/0/mp3/白狐_陈瑞_女人心.mp3"); 26 } 27 }); 28 btn2.setOnClickListener(new View.OnClickListener() { 29 @Override 30 public void onClick(View v) { 31 mPlayer.Play("/storage/emulated/0/mp3/孙露-难舍难分.mp3"); 32 } 33 }); 34 35 ........ 36 37 private void onPlayerStatusChanged(LeesAudioPlayer lapt, int status, @Nullable Object msg){ 38 switch (status){ 39 case LeesAudioPlayer.Status.STATUS_READY: 40 gifImageView.setImageResource(R.drawable.sound_play); 41 break; 42 case LeesAudioPlayer.Status.STATUS_COMPLETE: 43 gifImageView.setImageResource(R.drawable.sound_stop); 44 break; 45 case LeesAudioPlayer.Status.STATUS_ERROR: 46 gifImageView.setImageResource(R.drawable.sound_stop); 47 break; 48 } 49 }