Android MediaRecorder在启动时崩溃
我搜索了很多主题,但没有直接的答案 我有以下代码:Android MediaRecorder在启动时崩溃,android,android-emulator,mediarecorder,android-mediarecorder,Android,Android Emulator,Mediarecorder,Android Mediarecorder,我搜索了很多主题,但没有直接的答案 我有以下代码: recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setOutputFile(mFileName); recorder.set
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(mFileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
if(!mStartRecording)
{
btn.setText("Stop Recording");
try {
recorder.prepare();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start();
mStartRecording = true;
}
else
{
btn.setText("Start Recording");
mStartRecording = false;
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
我还补充说:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
请提供帮助。尝试将
启动
功能与准备
功能放在同一块中。可能有一个异常阻止了prepare的执行,并直接进入start,从而导致了IllegalStateException
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(output_formats[currentFormat]);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFilename());
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
仅当录音机准备就绪时,才尝试启动录音机:
try {
recorder.prepare();
recorder.start();
mStartRecording = true;
} catch (IOException e) {
Log.e( LOG_TAG, "Error when preparing or starting recorder", e);
}
好的,我知道了。我猜你把我的录音初始化为真的 因此,您的
if
将进入else
块。在其中,您停止了一个全新的MediaRecorder实例,而状态图不允许这样做
让你的媒体录像机成为你班级的一部分。并将mStartRecording布尔变量正确初始化为false。仅当字段为空时才重新实例化媒体记录器
if( recorder == null ) {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(mFileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
}//if
if(!mStartRecording) {
btn.setText("Stop Recording");
try {
recorder.prepare();
recorder.start();
mStartRecording = true;
} catch (IOException e) {
e.printStackTrace();
}//catch
} else {
btn.setText("Start Recording");
mStartRecording = false;
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}//else
我使用以下代码,非常适合我
protected void startRecording() {
// TODO Auto-generated method stub
i++;
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest"+i+".3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(mFileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
recorder.prepare();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "IllegalStateException called", Toast.LENGTH_LONG).show();
} catch (IOException e) {
// TODO Auto-generated catch block
Toast.makeText(getApplicationContext(), "prepare() failed", Toast.LENGTH_LONG).show();
}
recorder.start();
}
private void stopRecording() {
recorder.stop();
recorder.release();
recorder = null;
}
这些方法必须安排它将运行的顺序。在这里:
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(mFileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
我也有同样的问题。这是因为我在为录制的音频设置文件名时遗漏了斜杠 改变
this.fileName = Environment.getExternalStorageDirectory().getAbsolutePath();
this.fileName += "yourfilename.3gp";
到
我也有同样的问题,因为我的SurfaceView被隐形了。所以让它可见
mSurfaceView.setVisibility(View.VISIBLE);
必须首先调用
setOutputFile()
,然后调用其他方法
您必须先创建文件。请提供所有堆栈跟踪。您可以在/data/anr/traces.txt中找到什么?这可能看起来很愚蠢,但我不知道在哪里可以找到该文件。是否在工作区中?在控制台中:adb shell pull/data/anr/traces.txt。然后,您将在当前目录中找到该文件。我尝试通过CMD,但无效。对不起,我是新来的。对不起,我没提,我以为这是天经地义的。mStartRecording为false。请尝试添加一些跟踪(Log.d)语句以查看程序的功能。它是否在if或else块mfilename=Environment.getExternalStorageDirectory().getAbsolutePath()中崩溃;mFileName+=“/audiorecordtest4.3gp”;在onCreated Method中调用此方法在设备上尝试,尝试创建文件并尝试其他路径。如果您想在setaudioencoder之后使用setoutputfile,我可以讨论此问题?试试改变吧!如果mstartrecording初始化为true,则可能会发生错误。是否初始化为false?是否在模拟器上执行此操作?可能是sd卡问题。你在设备上试过了吗?我正在模拟器上运行。我已将其设置为音频录制启用。尽管他们在文档中提到模拟器不能做到这一点,但我读到它确实可以做到。我已经将模拟器设置为100mb的SD。这是不正确的。根据,首先选择源类型,然后决定输出格式,然后设置其余属性。
this.fileName = Environment.getExternalStorageDirectory().getAbsolutePath();
this.fileName += "/yourfilename.3gp";
mSurfaceView.setVisibility(View.VISIBLE);