package com.anthony.inputlayout.audio; import android.content.Context; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import java.io.IOException; public class AudioPlayerManager { private static MediaPlayer sMediaPlayer; private static boolean sIsPause; public static void playSound(String path, final Callback callback) { try { if (sMediaPlayer == null) { sMediaPlayer = new MediaPlayer(); } else { sMediaPlayer.reset(); } sMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); sMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { if (callback != null) { callback.onCompletion(); } } }); sMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { sMediaPlayer.reset(); if (callback != null) { callback.onError(); } return false; } }); sMediaPlayer.setDataSource(path); sMediaPlayer.prepare(); sMediaPlayer.start(); } catch (IOException e) { if (callback != null) { callback.onError(); } } } public static void resume() { if (sMediaPlayer != null && sIsPause) { sMediaPlayer.start(); sIsPause = false; } } public static void pause() { if (isPlaying()) { sMediaPlayer.pause(); sIsPause = true; } } public static void stop() { if (isPlaying()) { sMediaPlayer.stop(); } } public static boolean isPlaying() { return sMediaPlayer != null && sMediaPlayer.isPlaying(); } public static void release() { stop(); if (sMediaPlayer != null) { sMediaPlayer.release(); sMediaPlayer = null; } } /** * 获取当前正在播放音频的时间长度 * * @return */ public static int getCurrentPosition() { if (isPlaying()) { int position = sMediaPlayer.getCurrentPosition(); return position == 0 ? 1 : position; } return 0; } /** * 获取当前正在播放音频的时间长度 * * @return */ public static int getCurrentDuration() { if (isPlaying()) { int duration = sMediaPlayer.getDuration(); return duration == 0 ? 1 : duration; } return 0; } /** * 根据音频文件路径获取时间长度 * * @param context * @param audioFilePath * @return */ public static int getDurationByFilePath(Context context, String audioFilePath) { try { MediaPlayer mp = MediaPlayer.create(context, Uri.parse(audioFilePath)); int duration = mp.getDuration() / 1000; return duration == 0 ? 1 : duration; } catch (Exception e) { return 0; } } public interface Callback { void onError(); void onCompletion(); } }