安卓MediaPlayer播放asset文件下的音乐文件

版权声明:没有申明版权,你们随意! 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();

不管使用哪种方式,最终记得销毁。

这个只是一个简单的播放,预加载的回调没写,播放完成的回调没写。。。。。只能作为一个参考。

猜你喜欢

转载自blog.csdn.net/baby986911/article/details/81184574