我正在尝试以下代码:
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.
答案 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。