【问题标题】:Audio Recorder Error录音机错误
【发布时间】:2016-01-27 11:22:30
【问题描述】:

我正在尝试制作录音机。当我点击录音按钮时,它会出现错误 致命例外:主要 进程:risabh.agarwal.holmes.recorder,PID:22175 java.lang.IllegalStateException 在 android.media.MediaRecorder.setOutputFormat(本机方法) 在 risabh.agarwal.holmes.recorder.MainActivity$2.onClick(MainActivity.java:47)

这是我的代码

public class MainActivity extends AppCompatActivity {

Button btnPlay,btnRec,btnStop;
MediaRecorder mr;
String fname;
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    fname=Environment.getExternalStorageDirectory()+"/myrec1.3gp";
    btnPlay=(Button)findViewById(R.id.button1);
    btnRec=(Button)findViewById(R.id.button2);
    btnStop=(Button)findViewById(R.id.button3);
    btnPlay.setEnabled(false);
    btnStop.setEnabled(false);
    btnPlay.setOnClickListener(new OnClickListener() {


        @Override
        public void onClick(View v) {


        }
    });

    btnRec.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mr = new MediaRecorder();
            mr.setOutputFile(fname);
            mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mr.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
            mr.setAudioSource(MediaRecorder.AudioSource.MIC);
            try {
                mr.prepare();
            } catch (IllegalStateException e) {

                e.printStackTrace();
               // Toast.makeText(MainActivity.this, e.toString(), 5).show();
            } catch (IOException e) {
                // TODO Auto-generated catch block
               // Toast.makeText(MainActivity.this, e.toString(), 5).show();
                e.printStackTrace();
            }
            mr.start();
            btnRec.setEnabled(false);
            btnStop.setEnabled(true);
        }
    });

    btnStop.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            mr.release();
            mr.stop();

        }
    });
}

}

【问题讨论】:

  • 如果您将文件录制为 3gp 格式,试试这个:- recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

标签: android audio recorder


【解决方案1】:

尝试删除此行

mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

【讨论】:

  • 当我试图删除上述行时,我收到了一个错误,因为尝试设置音频编码器而不先设置音频源 01-27 22:24:42.527 12855-12855/? E/AndroidRuntime:致命异常:主进程:rishabh.agarwal.holmes.recorder,PID:12855 java.lang.IllegalStateException at android.media.MediaRecorder.setAudioEncoder(Native Method)
【解决方案2】:

试试这个:-

recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 录音机.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);

【讨论】:

    【解决方案3】:

    您忘记在清单文件中添加权限。在清单文件中写入以下代码。

     <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    

    【讨论】:

    • 我已添加权限。
    【解决方案4】:

    android.media.MediaRecorder.setOutputFormat 处的 java.lang.IllegalStateException

    查看the documentation,我们发现:

    public void setOutputFormat (int output_format)

    抛出
    IllegalStateException 如果在prepare()之后或setAudioSource()之前调用/setVideoSource()

    在您的代码中,您在setAudioSource 之前调用setOutputFormat,这明确说明会导致引发异常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 2012-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      相关资源
      最近更新 更多