android.media.MediaRecorder.start上的java.lang.IllegalStateException(本机方法) [英] java.lang.IllegalStateException at android.media.MediaRecorder.start(Native Method)

查看:1128
本文介绍了android.media.MediaRecorder.start上的java.lang.IllegalStateException(本机方法)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想制作一个录音机应用程序,但是当我单击开始录音"按钮时,它会崩溃. 我在android.media.MediaRecorder.start(本机方法)收到一个错误消息java.lang.IllegalStateException. Ive还附上了日志.

I want to make a voice recorder app but it crashes when i click the "Start Recording" button. I get an error saying java.lang.IllegalStateException at android.media.MediaRecorder.start(Native Method). Ive also attached the log.

package com.example.sahil.chuckit;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import java.io.File;

public class MainActivity extends Activity {

    private static Button submit;
    private static Button submit2;
    private static Button submit3;
    private static Button submit4;
    private MediaPlayer mediaPlayer;
    private MediaRecorder recorder;
    private String output_file;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        output_file = Environment.getExternalStorageState() +    "/audiorecorder.3gpp";
        OnClickButtonListener();OnClickButtonListener1();
        OnClickButtonListener3();OnClickButtonListener4();
     }
     public void OnClickButtonListener(){
        submit =(Button)findViewById(R.id.button);
        submit.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        beginRecording();

                    }
                    }

        );

    }
    public void OnClickButtonListener1(){
        submit2 =(Button)findViewById(R.id.button2);
        submit2.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        stopRecording();
                    }
                }
        );

    }

    public void OnClickButtonListener3(){
        submit3 =(Button)findViewById(R.id.button3);
        submit3.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        try {
                            playRecording();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
        );

    }
    public void OnClickButtonListener4(){
        submit4 =(Button)findViewById(R.id.button4);
        submit4.setOnClickListener(
                new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                      stopPlayback();
                    }
                }
        );

    }
    private void ditchMediaRecorder() {
        if (recorder != null)
            recorder.release();
    }
    private void beginRecording() {
        ditchMediaRecorder();
        File outFile=new File(output_file);

        if (outFile.exists())
        { outFile.delete();}

        recorder=new MediaRecorder();
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        recorder.setOutputFile(output_file);
        recorder.start();
    }
    private void stopRecording() {
        if(recorder!=null)
            recorder.stop();
    }

    private void playRecording() throws Exception {
        ditchMediaPlayer();
        mediaPlayer=new MediaPlayer();
        mediaPlayer.setDataSource(output_file);
        mediaPlayer.prepare();
        mediaPlayer.start();
    }

    private void ditchMediaPlayer() {
        if(mediaPlayer!=null)
        {
            try{
                mediaPlayer.release();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

    private void stopPlayback() {
        if (mediaPlayer!=null)
            mediaPlayer.stop();
    }




}

Logcat:

LOG:06-30 05:11:12.603 24621-24621/com.example.sahil.chuckit E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sahil.chuckit, PID: 24621 java.lang.IllegalStateException
    at android.media.MediaRecorder.start(Native Method)
    at com.example.sahil.chuckit.MainActivity.beginRecording(MainActivity.java:111)
    at com.example.sahil.chuckit.MainActivity.access$000(MainActivity.java:22)
    at com.example.sahil.chuckit.MainActivity$1.onClick(MainActivity.java:46)
    at android.view.View.performClick(View.java:5198)
    at android.view.View$PerformClick.run(View.java:21147)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
06-30 05:11:14.891 24621-24621/com.example.sahil.chuckit I/Process: Sending signal. PID: 24621 SIG: 9

推荐答案

您忘记了在beginRecording函数中的recordeer.start()函数之前调用recorder.prepare().

you are forgetting to call recorder.prepare() before recordeer.start() function in your beginRecording function.

准备功能将处理很多事情,例如将模拟数据转换为数字音频以进行压缩以及将文件存储在何处等

Prepare function will take care about lot of things like conversion of analog data to digital audio for compresion and where to store the file etc

这篇关于android.media.MediaRecorder.start上的java.lang.IllegalStateException(本机方法)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆