我正在创建一个应用程序,记录来电,无论是来来去去。当调用ends.But I得到非法状态异常时,记录应该停止,.Th异常位于mediarecorder.stop(),“停止调用无效状态4".I不知道means.This是什么第一次使用MediaRecorder。我已经检查过类似的questions..but,他们的答案没有帮助,me.Your帮助将是appreciated.Thanks in advance..This问题Error on MediaRecorder Stop : stop called in invalid state 4没有帮助我,因为问题中的问题是用户在调用stop()方法之前调用准备()。这和我的情况不一样。
代码:
import android.Manifest;
import android.content.Context;
import android.media.MediaRecorder;
import android.support.v4.app.ActivityCompat;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
public class TeleListener extends PhoneStateListener {
private Context context;
boolean isRinging=false;
String filepath;
String internalfilename="AUD";
public TeleListener(Context context,String filepath) {
this.context = context;
this.filepath=filepath;
}
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
MediaRecorder mediaRecorder= new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mediaRecorder.setOutputFile(filepath+internalfilename);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
if (isRinging) {
mediaRecorder.stop();
mediaRecorder.reset();
mediaRecorder.release();
isRinging=false;
}
Toast.makeText(context, "Idle", Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
isRinging=false;
Toast.makeText(context, "Offhook", Toast.LENGTH_SHORT).show();
break;
case TelephonyManager.CALL_STATE_RINGING:
isRinging=true;
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
Toast.makeText(context, "Ringing", Toast.LENGTH_SHORT).show();
break;
}
}
}异常:
E/MediaRecorder: stop called in an invalid state: 4
03-E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException
at android.media.MediaRecorder._stop(Native Method)
at android.media.MediaRecorder.stop(MediaRecorder.java:967)
at TeleListener.onCallStateChanged(TeleListener.java:43)
at android.telephony.PhoneStateListener$1.handleMessage
(PhoneStateListener.java:323)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:7325)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run
(ZygoteInit.java:1230)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)发布于 2018-03-15 10:03:59
private void stopRecording() {
if (null != recorder){
try {
recorder.prepare(); 当您停止MediaRecorder.时,不应该调用准备准备方法是在启动记录器之前调用的。请参阅MediaRecorder文档中的状态图。
https://stackoverflow.com/questions/49296213
复制相似问题