1
Я работаю с android.media.MediaRecorder
для записи голосового вызова, и застрял на исключение java.lang.IllegalStateException
, пожалуйста, помогитеCall Recording неудачу с java.lang.IllegalStateException
Код
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(SERVICE_TAG,"onStartCommand [flags: " + flags + ", startId: " + startId + "]");
initMediaRecorder("onStartCommand");
if(PojoClass.isRecording){
return super.onStartCommand(intent, flags, startId);
}else{
try {
//create Sound File.
Recording = createOutputFile();
//work for recording
if(Recording != null){
iRecorder.reset();
//iRecorder.setAudioChannels(1); //1 -> mono and 2-> Stereo
iRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
iRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //Line #82
iRecorder.setOutputFile(Recording.getAbsolutePath());
Log.d(MEDIA_RECORDER_TAG,"Recorder Set\nAudioChannels: 1 (mono)" +
"\nAudioSource: " + MediaRecorder.AudioSource.DEFAULT +
"\nAudioEncoder: " + MediaRecorder.AudioEncoder.DEFAULT +
"\nOutputFile: " + Recording.getAbsolutePath());
iRecorder.setOnErrorListener(this);
iRecorder.setOnInfoListener(this);
try {
iRecorder.prepare();
} catch (IOException e) {
e.printStackTrace();
iRecorder.release();
iRecorder = null;
}
//start recording
iRecorder.start();
PojoClass.isRecording = true;
//Notify user that Call is being recorded.
NotifyUserOnRecording(true);
}
} catch(Exception e){
e.printStackTrace();
iRecorder.release();
iRecorder = null;
}
}
return super.onStartCommand(intent, flags, startId);
}
LogCat
01-19 14:44:43.949 2191-2191/com.example.myapplication D/iRecordCall﹕ onCreate
01-19 14:44:43.949 2191-2191/com.example.myapplication D/MEDIA_RECORDER_TAG﹕ MediaRecorder is initialize at [onCreate]
01-19 14:44:43.951 2191-2191/com.example.myapplication D/iRecordCall﹕ onStartCommand [flags: 0, startId: 1]
01-19 14:44:43.951 2191-2191/com.example.myapplication D/MEDIA_RECORDER_TAG﹕ MediaRecorder is initialize at [onStartCommand]
01-19 14:44:43.961 2191-2191/com.example.myapplication E/MediaRecorder﹕ setAudioEncoder called in an invalid state(2)
01-19 14:44:43.961 2191-2191/com.example.myapplication W/System.err﹕ java.lang.IllegalStateException
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.media.MediaRecorder.setAudioEncoder(Native Method)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at com.example.myapplication.recorderservice.iRecordCall.onStartCommand(iRecordCall.java:82)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:3010)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.app.ActivityThread.-wrap17(ActivityThread.java)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1442)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.os.Handler.dispatchMessage(Handler.java:102)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.os.Looper.loop(Looper.java:148)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at android.app.ActivityThread.main(ActivityThread.java:5417)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at java.lang.reflect.Method.invoke(Native Method)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
01-19 14:44:43.963 2191-2191/com.example.myapplication W/System.err﹕ at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
@ 0x0nosugure Спасибо, это сработало для меня, но также показало одно и то же исключение на 'iRecorder.start()' как ** MediaRecorder: start failed: -38 ** – iSandeep
@iSandeep - вы разместили «iRecorder.prepare()», в блоке try-catch. Можете ли вы определить, было ли это успешным? – 0X0nosugar
@ 0x0nosugure Да, это Успешно – iSandeep