呼叫记录器在android中失败

时间:2013-08-14 02:57:07

标签: android audio-recording

我正在尝试以下代码:

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 个答案:

答案 0 :(得分:0)

我认为你的setOutputFile是个问题。尝试更改此行:

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

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

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

答案 1 :(得分: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();

答案 2 :(得分:0)

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

最后我补充道:

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

释放和空行成功了。不再崩溃。 希望它可以帮助某人

答案 3 :(得分:0)

我知道回答为时已晚,但我试着回答。 Android的官方网站says,MediaRecorder无法在模拟器上运行。因此,不要在模拟器上使用MediaRecorder。