2013-06-28 5 views
0

나는 기록 서비스를 시작하기 위하여려고하고 있지만 작동 에 관해서는 다음을 제외하고도 실패한안드로이드 MediaRecorder (3089)는 : 시작하지 못했습니다 : -38 예외

06-28 09:14:47.646: E/MediaRecorder(3089): start failed: -38 
06-28 09:14:47.646: W/System.err(3089): java.lang.IllegalStateException 
06-28 09:14:47.646: W/System.err(3089):  at android.media.MediaRecorder.start(Native Method) 
06-28 09:14:47.646: W/System.err(3089):  at tvbpv.test.EOrderSystem1.RecordService.startRecording(RecordService.java:87) 
06-28 09:14:47.646: W/System.err(3089):  at tvbpv.test.EOrderSystem1.RecordService.onStart(RecordService.java:49) 
06-28 09:14:47.646: W/System.err(3089):  at android.app.Service.onStartCommand(Service.java:438) 
06-28 09:14:47.646: W/System.err(3089):  at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2371) 
06-28 09:14:47.646: W/System.err(3089):  at android.app.ActivityThread.access$1900(ActivityThread.java:127) 
06-28 09:14:47.646: W/System.err(3089):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1222) 
06-28 09:14:47.646: W/System.err(3089):  at android.os.Handler.dispatchMessage(Handler.java:99) 
06-28 09:14:47.646: W/System.err(3089):  at android.os.Looper.loop(Looper.java:137) 
06-28 09:14:47.646: W/System.err(3089):  at android.app.ActivityThread.main(ActivityThread.java:4519) 
06-28 09:14:47.646: W/System.err(3089):  at java.lang.reflect.Method.invokeNative(Native Method) 
06-28 09:14:47.646: W/System.err(3089):  at java.lang.reflect.Method.invoke(Method.java:511) 
06-28 09:14:47.646: W/System.err(3089):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
06-28 09:14:47.646: W/System.err(3089):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561) 
06-28 09:14:47.646: W/System.err(3089):  at dalvik.system.NativeStart.main(Native Method) 

실패 시작 무엇 : -38 06-28 09 : 14 : 47.646 : W/System.err (3089) : java.lang.IllegalStateException mean?

RecordService.java 


private MediaRecorder recorder; 
private File instanceRecord; 
private boolean recording= false; 
@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    return null; 
} 



@Override 
public void onStart(Intent intent, int startId) { 
    startRecording();  
    super.onStart(intent, startId); 
} 



@Override 
public void onDestroy() { 
    stopRecording(); 
    super.onDestroy(); 
} 

private void prepareRecording() 
{ 
    try 
    { 
     recorder.prepare(); 
    } 
    catch(IllegalStateException e) 
    { 
     e.printStackTrace(); 

    } 
    catch (IOException e) 
    { 
     e.printStackTrace(); 
    } 
} 

public void startRecording(){ 

    try { 

    recorder = new MediaRecorder(); 
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 

    Date today = Calendar.getInstance().getTime();  
    Format formatter = new SimpleDateFormat("yyyy-MM-dd_HH:mm:ss"); 
    String reportDate = formatter.format(today); 


    File instanceRecordDirectory = new File(Environment.getExternalStorageDirectory() + File.separator + "TVB_PV_recordings"); 

    if(!instanceRecordDirectory.exists()){ 
     instanceRecordDirectory.mkdirs(); 
    } 

    instanceRecord = new File(instanceRecordDirectory.getAbsolutePath() + File.separator + reportDate + "_sales_recording.mp4"); 
    if(!instanceRecord.exists()){ 
     instanceRecord.createNewFile(); 
    } 

    recorder.setOutputFile(instanceRecord.getAbsolutePath());   
    prepareRecording(); 
    recorder.start(); 
    recording = true; 

    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 

public void stopRecording() { 
    if (recorder != null) {  
      try { 
      recorder.stop(); 
      } catch(RuntimeException e) { 
       instanceRecord.delete(); //you must delete the outputfile when the recorder stop failed. 
      } finally { 
      recorder.release(); 
      recorder = null; 
      } 
    }     
} 

서비스

시작
startService(new Intent(OrderSystemSubmit.this, RecordService.class)); 

기타 활동 :

stopService(new Intent(OrderSystemSubmit.this, RecordService.class)); 

권한

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
<uses-permission android:name="android.permission.RECORD_AUDIO" /> 

내가 또 뭘 추가해야합니까?

답변

0

당신이 수를이 작동하고 왜 MPEG_4하지 않는 이유에 대한 어떤 설명을해야합니까 MPEG_2 또는 1

+0

에 OutputFormat의 mybe을 변경하려고? (OutputFormat.MPEG_2 또는 1이 존재하지 않기 때문에) – njzk2

+0

MPEG_4 코드를 변경하려면? – SRam