2017-07-25 52 views
0

很快提出我的問題。如何在android中錄製通話? (舊方法不起作用)

mediaRecorder = new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    mediaRecorder.setOutputFile((audioFile.getAbsolutePath())); 

此代碼適用於note5,但不適用於s8 +。我無法錄製其他方聲音。

由於CAPTURE_AUDIO_OUTPUT權限問題,無法使用AudioSource.VOICE_CALL或AudioSource.VOICE_DOWNLINK和AudioSource.VOICE_UPLINK。

但ACR應用程序成功記錄所有對話,所以它是可能的。

注:我不認爲格式或編碼器與該主題相關

全碼:

private void startRecord() { 

    mediaRecorder = new MediaRecorder(); 
    Long tsLong = System.currentTimeMillis()/1000; 
    String ts = tsLong.toString(); 

    File recordDirectory = new File(Environment.getExternalStorageDirectory().toString() + "/CallRecord"); 

    if (!recordDirectory.isDirectory()) { 
     recordDirectory.mkdirs(); 
    } 

    audioFile = new File(Environment.getExternalStorageDirectory().toString() + "/CallRecord", 
      ts + ".aac"); 

    recordedFilePath = audioFile.getPath(); 
    RecordInfo.recordPath = recordedFilePath; 

    tsLong = null; 
    ts = null; 
    mediaRecorder = new MediaRecorder(); 
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    mediaRecorder.setOutputFile((audioFile.getAbsolutePath())); 

    try { 
     mediaRecorder.prepare(); 
     mediaRecorder.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 


private void stopRecord() { 
    mediaRecorder.stop(); 
    mediaRecorder.release(); 
} 
+0

看看這個: https://github.com/rjeffm/CallRecorder –

+0

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); 因爲權限,我不能使用它。 從VOICE_CALL源捕獲需要CAPTURE_AUDIO_OUTPUT權限。此權限僅供系統組件使用,並且不適用於第三方應用程序。 –

回答

0

開始錄音

public void startAudioRecording(View view) throws IOException { 
     //Create file to save recording 
     File dir = Environment.getExternalStorageDirectory(); 
     try { 
      audiofile = File.createTempFile("sound", ".3gp", dir); 
     } catch (IOException e) { 
      Log.e(TAG, "external storage access error"); 
      return; 
     } 
     mRecorder = new MediaRecorder(); 
     mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
     mRecorder.setOutputFile(audiofile.getAbsolutePath()); 
     mRecorder.prepare(); 
     mRecorder.start(); 
     } 

停止錄音

public void stopAudioRecording(View view) { 
     mRecorder.stop(); 
     mRecorder.release(); 
     }