版权声明:没有申明版权,你们随意! https://blog.csdn.net/baby986911/article/details/81184574
第一种方式,通过一个对象去管理
public class PlayRam { private MediaPlayer mediaPlayer; public MediaPlayer getMediaPlayer() { return mediaPlayer; } public void setMediaPlayer(MediaPlayer mediaPlayer) { this.mediaPlayer = mediaPlayer; } public void startPlay() { if (null == mediaPlayer) return; //如果没在播放中,立刻开始播放。 if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } public void pausePlay() { if (null == mediaPlayer) return; //如果在播放中,立刻暂停。 if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } public void stopPlay() { if (null == mediaPlayer) return; //如果在播放中,立刻停止。 if (mediaPlayer.isPlaying()) { mediaPlayer.reset(); } } public void destory() { if (null == mediaPlayer) return; mediaPlayer.stop(); mediaPlayer.release(); } //------------------------------------------------------- public static class RawBuild { private AssetFileDescriptor assetFileDescriptor; private MediaPlayer mediaPlayer; private Context mContext; public RawBuild(Context mContext) { this.mContext = mContext; if (null == mediaPlayer) { mediaPlayer = new MediaPlayer(); } } public RawBuild palyPath(AssetFileDescriptor assetFileDescriptor) { this.assetFileDescriptor = assetFileDescriptor; return this; } public RawBuild initMp() { try { mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); mediaPlayer.prepare();//初始化播放器MediaPlayer } catch (IOException e) { e.printStackTrace(); } return this; } public PlayRam build() { PlayRam palyRam = new PlayRam(); palyRam.setMediaPlayer(mediaPlayer); return palyRam; } } }
使用方式
AssetManager assetManager = getAssets(); try { AssetFileDescriptor assetFileDescriptor = assetManager.openFd("that_people.mp3"); PlayRam playRam = new PlayRam.RawBuild(this).palyPath(assetFileDescriptor).initMp().build(); playRam.startPlay(); } catch (IOException e) { e.printStackTrace(); }
第二种方式,通过单例
public enum PlayRamModify { INS; private AssetManager assetManager; private AssetFileDescriptor assetFileDescriptor ; private MediaPlayer mediaPlayer; private void initAssert() { if (null == assetManager) //asset通过application的作用域去获取 assetManager = FrameApplication.getInstance().getAssets(); } public void initFileName(String name) { initAssert(); try { assetFileDescriptor = assetManager.openFd(name); } catch (IOException e) { e.printStackTrace(); } initMp(); } private void initMp() { if (null == mediaPlayer) { mediaPlayer = new MediaPlayer(); } try { mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); mediaPlayer.prepare();//初始化播放器MediaPlayer } catch (IOException e) { e.printStackTrace(); } } public void startPlay() { if (null== mediaPlayer)return; //如果没在播放中,立刻开始播放。 if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } public void pausePlay() { if (null== mediaPlayer)return; //如果在播放中,立刻暂停。 if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } public void stopPlay() { if (null== mediaPlayer)return; //如果在播放中,立刻停止。 if (mediaPlayer.isPlaying()) { mediaPlayer.reset(); } } public void destory() { if (null== mediaPlayer)return; mediaPlayer.stop(); mediaPlayer.release(); } }
使用方式
PlayRamModify.INS.initFileName("that_people.mp3"); PlayRamModify.INS.startPlay();
第三种方式,通过接口和实现类
public interface MpInterface { void initMp();//初始化播放器 void start();//开始 void puase();//暂停 void stop();//停止 void destory();//销毁 void initAssert();//初始化assets void initFileName(String name); void initDataSource();//初始化播放文件 }
public class MpInterfaceImpl implements MpInterface { private MediaPlayer mediaPlayer;//播放器 private AssetManager assetManager;//文件夹管理器 private AssetFileDescriptor assetFileDescriptor;//文件管理 @Override public void initMp() { if (null == mediaPlayer) mediaPlayer = new MediaPlayer(); } @Override public void start() { //如果没在播放中,立刻开始播放。 if (!mpInitOver()) return; if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } } @Override public void puase() { if (!mpInitOver()) return; //如果在播放中,立刻暂停。 if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } } @Override public void stop() { if (!mpInitOver()) return; //如果在播放中,立刻停止。 if (mediaPlayer.isPlaying()) { mediaPlayer.reset(); } } @Override public void destory() { if (!mpInitOver()) return; mediaPlayer.stop(); mediaPlayer.release(); } @Override public void initDataSource() { initMp(); try { mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(), assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength()); mediaPlayer.prepare();//初始化播放器MediaPlayer } catch (IOException e) { e.printStackTrace(); } } @Override public void initAssert() { if (null == assetManager) assetManager = FrameApplication.getInstance().getAssets(); } @Override public void initFileName(String name) { initAssert(); try { assetFileDescriptor = assetManager.openFd(name); } catch (IOException e) { e.printStackTrace(); } initDataSource(); } public boolean mpInitOver(){ if (null == mediaPlayer) return false ; return true ; } }
使用方式
MpInterface mpInterface = new MpInterfaceImpl(); mpInterface.initFileName("that_people.mp3"); mpInterface.start();
不管使用哪种方式,最终记得销毁。
这个只是一个简单的播放,预加载的回调没写,播放完成的回调没写。。。。。只能作为一个参考。