public class PlayerUtil {
private static ExecutorService executorService;
private static File audioFile;
private static Handler mainThreadHandler;
// volatile 能及时同步到主内存(不在本线程读取的)中,避免脏读
private static volatile boolean isPlaying;
private static volatile boolean isPrepared;
private static MediaPlayer mediaPlayer;
private static Runnable playerFailRemind;
private static Runnable playerCompletionListener;
private static Runnable playerErrorListener;
private static Runnable playerPreparedListener;
private static PlayProgressListener playProgressListener;
private static int currentProgress;
private static int totalProgress;
public interface PlayProgressListener {
void playProgress(float percentage);
}
public static int getTotalProgress() {
return totalProgress;
}
public static boolean isIsPlaying() {
return isPlaying;
}
public static boolean isIsPrepared() {
return isPrepared;
}
public static void setPlayerCompletionListener(Runnable playerCompletionListener) {
PlayerUtil.playerCompletionListener = playerCompletionListener;
}
public static void setPlayerErrorListener(Runnable playerErrorListener) {
PlayerUtil.playerErrorListener = playerErrorListener;
}
public static void setPlayerPreparedListener(Runnable playerPreparedListener) {
PlayerUtil.playerPreparedListener = playerPreparedListener;
}
public static int getCurrentProgress() {
return currentProgress;
}
private static void init() {
// 录音JNI函数不具备线程安全性,所以要用单线程
if (executorService == null) {
executorService = Executors.newSingleThreadExecutor();
}
if (mainThreadHandler == null) {
mainThreadHandler = new Handler(Looper.getMainLooper());
}
}
private static void execPlayProgress() {
executorService.submit(new Runnable() {
@Override
public
mediaPlayer的子线程播放封装类
最新推荐文章于 2023-04-04 09:38:42 发布