美文网首页音视频
Android音视频<第三篇>:简单音频播放实现

Android音视频<第三篇>:简单音频播放实现

作者: NoBugException | 来源:发表于2019-09-16 17:30 被阅读0次

    播放音频需要借助MediaPlayer对象,MediaPlayer可以播放本地音频和网络音频。文本的目的是为了尝试使用MediaPlayer实现最简单的音频播放功能,下一篇将全面说明MediaPlayer对象。

    实现音频播放功能分为以下步骤:

    创建MediaPlayer对象指定音频文件资源添加监听预处理播放暂停操作销毁资源

    [第一步]:创建MediaPlayer对象

        MediaPlayer mediaPlayer = new MediaPlayer();
    

    [第二步]:指定音频文件资源

                try {
                    File file = new File(Environment.getExternalStorageDirectory(), "music_test.mp3");
                    mediaPlayer.setDataSource(file.getPath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
    

    当然,别忘了添加读写外部存储权限。

    [第三步]:添加监听

    添加预处理完成监听程序

        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
    
            }
        });
    

    播放完成监听

        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
    
            }
        });
    

    播放异常监听

        mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
            @Override
            public boolean onError(MediaPlayer mp, int what, int extra) {
                return false;
            }
        });
    

    [第四步]:预处理

                try {
                    mediaPlayer.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                } catch (IllegalStateException e){
                    mediaPlayer.start();
                    e.printStackTrace();
                }
    

    每次执行预处理方法前必须重新指定音频文件资源路径,当执行预处理方法后,预处理完成的回调方法就会执行,这时,开始播放音频。

    [第五步]:播放暂停操作

                //播放
                mediaPlayer.start();
                //暂停
                mediaPlayer.pause();
    

    [第六步]:销毁MediaPlayer对象资源

    @Override
    protected void onDestroy() {
        super.onDestroy();
    
        if(mediaPlayer != null){
            //释放资源
            mediaPlayer.release();
    
            mediaPlayer.setOnPreparedListener(null);
            mediaPlayer.setOnCompletionListener(null);
            mediaPlayer.setOnErrorListener(null);
        }
    
    }
    

    当然,释放MediaPlayer资源的同时顺便将监听置为null,防止因为观察者设计模式造成的内存泄漏。

    注意事项

    (1)播放音频必须执行音频资源的路径(本地路径或者网络路径);
    (2)指定音频资源的路径后,必须告诉MediaPlayer对象,初始化已经准备好了,可以进行音频操作了,也就是执行mediaPlayer.prepare()方法,预处理有一个预处理完成的监听,执行mediaPlayer.prepare()方法后会触发预处理完成监听,只有预处理完成之后才可以对音频进行播放暂停等操作;
    (3)如果连续执行mediaPlayer.start()方法时,必须要等到前面一个音频播放完成之后才能重新播放,所以一般会有这样的判断

                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                }
    

    (4)当重新指定播放资源时,必须执行

        mediaPlayer.reset();
    

        mediaPlayer.prepare();
    

    (5)为了防止内存泄漏,需要在onDestroy里面释放资源,代码上面已有。

    [本章完...]

    相关文章

      网友评论

        本文标题:Android音视频<第三篇>:简单音频播放实现

        本文链接:https://www.haomeiwen.com/subject/gkneyctx.html