0

我正在尝试以下代码:

recorder = new MediaRecorder();
           recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
           recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
           recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
           recorder.setOutputFile("/mnt/sdcard/sound123.mp4");//(audiofile.getAbsolutePath());
           recorder.prepare();

           recorder.start();

我的应用程序在 recorder.start() 上崩溃;我已按照 stackoverflow 中的建议将 AudioSource.VOICE_CALL 更改为 AudioSource..MIC,但它在启动时仍然崩溃。

我在清单中授予了以下权限:

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

它给了我以下例外:

 java.lang.RuntimeException: start failed.
4

4 回答 4

0

我认为您的 setOutputFile 是问题所在。尝试更改此行:

recorder.setOutputFile("/mnt/sdcard/sound123.mp4");//(audiofile.getAbsolutePath());

recorder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/sound123.3gp"

还要意识到您将输出格式设置为 3gp 并且您的文件具有扩展名 .mp4

于 2013-08-14T03:03:56.253 回答
0

尝试这个:

String path=Environment.getExternalStorageDirectory()+"/sound123.mp4";
        File directory = new File(path).getParentFile();
        if (!directory.exists() && !directory.mkdirs()) {
            throw new IOException("Path to file could not be created.");
        }
        mRrecorder=new MediaRecorder();

        mRrecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRrecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        mRrecorder.setOutputFile(path);
        mRrecorder.prepare();
        mRrecorder.start();
于 2013-08-15T10:09:02.120 回答
0

我在尝试录音时遇到了类似的问题。我的录音机可以工作一次,但第二次会使应用程序崩溃。我怀疑重新初始化记录器 obj 是问题,但测试并没有证明这一点。

最后我补充说:

recorder.stop();
recorder.release();
recorder = null;

release 和 null 行起到了作用。不再崩溃。希望它可以帮助某人

于 2013-12-11T14:52:58.743 回答
0

我知道现在回答为时已晚,但我试着回答。Android 的官方网站MediaRecorder 在模拟器上不起作用。所以,不要在模拟器上使用 MediaRecorder。

于 2015-09-16T06:56:43.987 回答