2011-07-27 1 views
8

나는이 코드를 기록하여 통화를 기록합니다. 그것은 안드로이드 2.1에서 잘 작동합니다. Android 2.2에서는 0 바이트의 출력 파일을 만듭니다.안드로이드 2.2에서 레코드 호출

어떻게 해결할 수 있습니까?

MediaRecorder _recorder = new MediaRecorder(); 


public void start() throws IOException { 
    try { 
     String state = android.os.Environment.getExternalStorageState(); 
     if (!state.equals(android.os.Environment.MEDIA_MOUNTED)) { 
      throw new IOException("SD Card is not mounted. It is " + state 
        + "."); 
     } 

     // make sure the directory we plan to store the recording in exists 
     File directory = new File(Environment.getExternalStorageDirectory().getAbsolutePath() 
       + "/sam.wav").getParentFile(); 
     if (!directory.exists() && !directory.mkdirs()) { 
      throw new IOException("Path to file could not be created."); 
     } 


     _recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 
     _recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
     _recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() 
       + "/test.wav"); 
     _recorder.prepare(); 
     _recorder.start(); 

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

답변

6

사용이 조각 대신

가 작동하고
_recorder.setAudioSource(android.media.MediaRecorder.AudioSource.VOICE_CALL); 
+0

_recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_DOWNLINK | MediaRecorder.AudioSource.VOICE_UPLINK); 

. 답장을 보내 주셔서 감사합니다. –

+1

적어도 설명서에 따르면 VOICE_UPLINK의 상수 값은 2이고 VOICE_DOWNLINK의 상수 값은 3이므로 ORing이 3을 반환합니다 ... 아마도 작동하지만 나에게 DOWNLINK 만 기록하는 것처럼 보일 것입니다 ... –

2

전화 녹음은 일부 Android 휴대 전화에서만 작동합니다. 2.1을 실행하는 하나의 전화에서 작동하지만 2.2를 실행하는 다른 모델에서는 작동하지 않을 수 있습니다. API가 모든 아키텍처에서 컴파일되고 실행 되더라도 일부 장치는 하드웨어에서이 기능을 비활성화했습니다.

자세한 내용은 How can I record voice and record Call in Android?을 참조하십시오.