Android 如何知道MediaRecorder是否处于运行状态?
我编写了一个代码,用MediaRecorder录制通话音频 如何知道MediaRecorder是否处于运行状态,以停止录制。 像 上面的代码只是一个例子。。如果你不明白我的问题,请告诉我。。我会用实际代码解释清楚Android 如何知道MediaRecorder是否处于运行状态?,android,audio-recording,mediarecorder,Android,Audio Recording,Mediarecorder,我编写了一个代码,用MediaRecorder录制通话音频 如何知道MediaRecorder是否处于运行状态,以停止录制。 像 上面的代码只是一个例子。。如果你不明白我的问题,请告诉我。。我会用实际代码解释清楚 我只想知道“MediaRecorder处于何种状态?”->正在录制/已发布/已准备好/初始状态等。您无法直接获取状态,请参阅 当mediaplayer达到某个状态时,您需要在侦听器中手动设置一个变量,以便记住当前状态 本次讨论还包括: 此增强请求是针对MediaPlayer而不是Med
我只想知道“MediaRecorder处于何种状态?”->正在录制/已发布/已准备好/初始状态等。您无法直接获取状态,请参阅 当mediaplayer达到某个状态时,您需要在侦听器中手动设置一个变量,以便记住当前状态 本次讨论还包括:
此增强请求是针对MediaPlayer而不是MediaRecorderAndroid的,因此基本上您甚至无法手动实现精确的录制状态,例如:设置录制会话的最大持续时间(毫秒)。在setOutFormat()之后但在prepare()之前调用此函数。录制达到指定的持续时间后,将向MediaRecorder.onInfo Listener发送通知,其中包含“what”代码的媒体\u RECORDER\u INFO\u MAX\u duration\u已达到,录制将停止。停止是异步发生的,不能保证在通知侦听器时记录器已经停止。您说过“当mediaplayer达到某个状态时,在侦听器中手动设置一个变量”。你说的“听众”是什么意思
MediaRecorder
很少触发事件,即信息侦听器、错误侦听器和路由更改侦听器。听哪一个知道它达到了目标状态?请在你的答案中添加一些解释,以便其他人可以从中学习。没有这样的方法可以知道MediaRecorder的状态。我刚才举了一个例子,你如何使用create your-own方法检查状态,比如(flag==1),即使这个问题已经十年了,问题仍然存在,也就是说,无法确定MediaRecorder
是否已经开始录制。然而,我只是在这里发布了一个解决方法:在这里发布链接,因为我在研究问题时发现了这个问题,而接受的解决方案让我犹豫了一下,因为它是针对MediaPlayer
的,而不是针对MediaRecorder
。当做
boolean running;
MediaRecorder mr;
//what should i assign to running?
if(running){
mr.stop()
}
String flag = "0";
public void audioRecordStart(){
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED && ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
try {
if (flag.equals("1")){
// It means recorder is already on recording state.
}
else{
myAudioRecorder.prepare();
myAudioRecorder.start();
flag = "1";
}
} catch (IllegalStateException ise) {
// make something ...
} catch (IOException ioe) {
// make something
}
Toast.makeText(getApplicationContext(), "Recording started", Toast.LENGTH_LONG).show();
}
else {
getAudioPermission();
}
}
public void audioRecordStop() {
if (flag.equals("0")){
// It means recorder is already stopped state.
}
else {
myAudioRecorder.stop();
myAudioRecorder.release();
myAudioRecorder = null;
flag = "0";
Toast.makeText(getApplicationContext(), "Audio Recorder successfully", Toast.LENGTH_LONG).show();
}
}