解决Android MediaPlayer错误之MediaPlayer start called in state 0

该APP主要功能是播放和录音。

但是使用Timer计时器实现在子线程中自动每次录5秒,共录33次。

player 为MediaPlayer对象。

在启动播放时使用player.start()

结束播放时使用player.stop()

然后不断开始结束

但是第二次时会出现报错MediaPlayer start called in state 0。

然后查了一下这个问题,就是如果是第一次用player这个对象开始播放时可以直接使用player.start()。

但是如果是循环使用的话,第二次开始需要在player.start()前面或者player.stop()后面添加player.prepare()。

但是我在该代码时,如果第一次用player.start()的话,在player.start()前面添加player.prepare()会产生异常。

因此为了避免判断是否第一次使用,建议多次使用player.start()时在player.stop()后面添加player.prepare()方法,在添加时会提示产生异常,因此还需要处理异常,下面是我的整个TimerTask代码:

class myTaskStart extends TimerTask{
        @Override
    public void run(){
            //开始录音
                System.out.println("启动程序");

                //count为一个全局变量,该全局变量来控制run的运行次数
                if(count<33){
                    count=count+1;
                }
                else {
                    this.cancel();
                    System.exit(0);
                }
                //结束使用count控制run的运行次数


            //开始更新TextView里面的字符串
            textView.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText("start"+count);
                }
            });
            //结束更新TextView里面的字符串

                player.start();
                String fileName = new SimpleDateFormat("yyyyMMddhhmmss").format(new Date());
                audioRecorder.createDefaultAudio(fileName);    // status = Status.STATUS_READY;
                audioRecorder.startRecord(null);

              //等待录音
            try {
                Thread.sleep(5000);
            }
            catch (InterruptedException e)
            {
                Toast.makeText(getApplicationContext(),"异常",Toast.LENGTH_LONG).show();
            }

            //停止录音
            System.out.println("停止录音啊啊啊啊");
            audioRecorder.stopRecord();
            player.stop();

            textView.post(new Runnable() {
                @Override
                public void run() {
                    textView.setText("end");
                }
            });

            //在player.stop()后面添加player.prepare(),需要处理异常!
            try {
                player.prepare();
            }
            catch (IOException e)
            {
                System.out.println("player初始化失败!");
            }
            //结束添加player.prepare

        }
}

主要代码如下:

            player.stop();

            //在player.stop()后面添加player.prepare(),需要处理异常!
            try {
                player.prepare();
            }
            catch (IOException e)
            {
                System.out.println("player初始化失败!");
            }
            //结束添加player.prepare

这样就可以正常运行了。

 

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值