最近的項(xiàng)目需要播放網(wǎng)絡(luò)音頻,就直接摘成一個(gè)工具類了
public class MediaPlayerUtil {
private static volatile MediaPlayerUtil mediaPlayer;
private MediaPlayerUtil() {
}
public static MediaPlayerUtil getMediaPlayer() {
if (mediaPlayer == null) {
synchronized (MediaPlayerUtil.class) {
if (mediaPlayer == null) {
mediaPlayer = new MediaPlayerUtil();
}
}
}
return mediaPlayer;
}
private MediaPlayer mPlayer;
/**
* 播放音頻
*
* @param songUrl 網(wǎng)絡(luò)音頻Url
*/
public void player(String songUrl) {
if (TextUtils.equals(songUrl, nowPlaySongUrl)) {
Log.d(TAG, "player: 重復(fù)的url");
return;
}
stopPlay();
nowPlaySongUrl = songUrl;
if (mPlayer == null) {
mPlayer = new MediaPlayer();
}
try {
Log.d(TAG, "player: 當(dāng)前要播放的歌曲Url === " + songUrl);
mPlayer.reset();
//====這種方式只能http徙瓶,https會(huì)拋IO異常
mPlayer.setDataSource(songUrl);
mPlayer.prepareAsync();
mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "onPrepared: 播放 "+mp.getDuration());
mp.start();
}
});
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
nowPlaySongUrl = "";
if (mPlayer != null)
mPlayer.release();
if (mPlayer != null)
mPlayer = null;
}
});
} catch (IOException e) {
Log.d(TAG, " 播放音樂異常" + e.getMessage());
ToastUtil.showShort(" 播放音樂異常" + e.getMessage());
}
}
/**
* 列表中的音頻播放
* <p>
* 點(diǎn)擊播放,再點(diǎn)擊停止
*
* @param songUrl
*/
public void playOrStop(String songUrl) {
if (mPlayer != null) {
stopPlay();
} else {
player(songUrl);
}
}
/**
* 停止播放音頻润匙,lastSongUrl置空
*/
public void stopPlay() {
nowPlaySongUrl = "";
try {
if (mPlayer != null)
mPlayer.stop();
if (mPlayer != null)
mPlayer.release();
if (mPlayer != null)
mPlayer = null;
} catch (Exception e) {
Log.e(TAG, "stopPlay: " + e.toString());
}
}
// 當(dāng)前播放的音頻地址
private static String nowPlaySongUrl;
private static String TAG = "TAG.Util.MediaPlay";
}