【问题标题】:MediaPlayer is not pausing the audio fileMediaPlayer 没有暂停音频文件
【发布时间】:2017-03-06 10:38:34
【问题描述】:

我有一个录音应用程序,它将通过麦克风录制音频,录制音频后,它会在用户按下播放按钮时播放音频,直到这里它工作得很好,但我想在播放时暂停音频文件用户单击暂停按钮。这是我的java代码。该怎么做?

public class tab1 extends Fragment {

private ViewPager mViewPager;
private Button play,stop,record;
private MediaRecorder myAudioRecorder;
private String outputfile;


public tab1() {

}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {


    final View rootview=inflater.inflate(R.layout.fragment_tab1,container,false);


    final ImageButton  record=(ImageButton)rootview.findViewById(R.id.record);
   final ImageButton stop=(ImageButton) rootview.findViewById(R.id.stop);
   final ImageButton play=(ImageButton) rootview.findViewById(R.id.play);
    final  ImageButton pause=(ImageButton)rootview.findViewById(R.id.pause);


 stop.setVisibility(getView().INVISIBLE);


    File directorysample=new File(Environment.getExternalStorageDirectory()+separator+"RadioRecords");
    directorysample.mkdirs();
    String filename = "/recording_" + System.currentTimeMillis() + ".mp3";
    final  String directory = Environment.getExternalStorageDirectory()+ "/RadioRecords";
    outputfile = directory + "/" + filename;




    record.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            try {


                myAudioRecorder=new MediaRecorder();
                myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.DEFAULT);
                myAudioRecorder.setOutputFile(outputfile);
                myAudioRecorder.prepare();
                myAudioRecorder.start();
            }
            catch (IllegalStateException ise){



            }catch (IOException ioe){



            }
         // record.setEnabled(false);
          //stop.setEnabled(true);
            stop.setVisibility(getView().VISIBLE);


        }

    });


    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {



            myAudioRecorder.stop();
        //   record.setEnabled(true);
            myAudioRecorder.release();
            myAudioRecorder=null;
         //stop.setEnabled(false);
       //play.setEnabled(true);


            stop.setVisibility(getView().INVISIBLE);

        }

    });
    play.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MediaPlayer mediaPlayer=new MediaPlayer();

            try {
                mediaPlayer.setDataSource(outputfile);
                mediaPlayer.prepare();
                mediaPlayer.start();


            }
            catch (Exception e)
            {

            }

        }
    });

    pause.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            MediaPlayer mediaPlayer=new MediaPlayer();

            try {
                mediaPlayer.setDataSource(outputfile);
                mediaPlayer.prepare();
                mediaPlayer.pause();


            }
            catch (Exception e)
            {

            }

        }
    });
    return rootview;
}

 }

【问题讨论】:

    标签: android audio media-player


    【解决方案1】:

    不要使用多个 MediaPlayer 进行播放和暂停。使用一个媒体播放器。在 onCreateView 中启动它或播放 onClick 并在您想要的地方使用。

    全局声明一个 MediaPlayer:

    MediaPlayer mediaPlayer;
    

    在onCreateView中启动或者在onClick中播放:

    mediaPlayer = new MediaPlayer();
    

    然后替换这个:

    mediaPlayer.setDataSource(outputfile);
    mediaPlayer.prepare();
    mediaPlayer.pause();
    

    与:

    if (mediaPlayer.isPlaying()) {
         mediaPlayer.pause();
    }
    

    【讨论】:

    • 但是它可以录制、停止、播放而不是暂停,为什么?
    • 仔细看。您使用相同的 MediaRecoder 进行播放和停止。这就是它起作用的原因。但是您为 PLAY 和 PAUSE 启动了两个新的 MediaPlayer。当您按下 PLAY 时,会创建新的 MediaPlayer 并开始播放。在这种情况下,当您按下 PAUSE 时,您正在创建另一个新的 MediaPlayer,而前一个已消失。所以前一个继续播放,“Pause MediaPlayer”没有什么可以停止的。希望这可以解决问题。对不起,冗长的评论
    • 你删除了 MediaPlayer mediaPlayer=new MediaPlayer();在 pause.setonClickListener 中?
    • :(如果您愿意,可以添加您的最新代码,以便我查看。
    • 嘿嘿,它的工作老兄,我标记了你的问题,如果你能支持我的问题,谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多