2016-01-19 1 views
1

Je travaille avec android.media.MediaRecorder pour l'enregistrement appel vocal, et est resté coincé à l'exception java.lang.IllegalStateException, s'il vous plaît aiderenregistrement de l'appel a échoué avec java.lang.IllegalStateException

code

@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) 

Répondre

1

Le MediaRecorder h à être dans la « DataSourceConfigured » état si vous voulez appeler

iRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 

Alors avant de cette ligne, vous devez définir le format du fichier que vous voulez générer, par exemple:

iRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 

Voir aussi ce lien vers documentation, en particulier le diagramme d'état.

+0

@ 0x0nosugure Merci, cela a fonctionné pour moi, mais a également montré la même exception sur 'iRecorder.start()' que ** MediaRecorder: démarrage échoué: -38 ** – iSandeep

+0

@iSandeep - vous avez placé le "iRecorder.prepare()" dans un try-catch-block. Pouvez-vous déterminer si c'était réussi? – 0X0nosugar

+0

@ 0x0nosugure Oui c'est Successfull – iSandeep