마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

통화녹음을 테스트하고 있는데 이런 로그가 뜹니다! 단말에서 막아놓은건가요??

0 추천

안녕하세요. 안드로이드 초보 개발자입니다.

통화중에 녹음하는 기능을 개발해보고 있습니다.

MediaRecorder라는걸 사용하라고 하더군요.

그래서 다음과 같이 해주고 있습니다.

recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setOutputFile(filePath);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
 try {
      recorder.prepare();
      recorder.start();
} catch (Exception e) {
}

 

LG G4와 갤럭시 S6로 테스트를 해보았습니다.

LG G4는 이상없이 잘 녹음이 됩니다.

근데 갤럭시 S6는 안되더라구요... 그래서 로그를 봤더니 다음과 같이 출력이 됩니다.

06-07 17:30:26.581: I/MediaPlayerService(3094): Create new media recorder client from pid 11435
06-07 17:30:29.611: I/APM::AudioPolicyManager(3094): getInputForAttr() source 4, samplingRate 8000, format 1, channelMask 10,session 312, flags 0
06-07 17:30:29.611: V/audio_hw_primary(3094): adev_open_input_stream: request sample_rate:8000
06-07 17:30:29.611: V/audio_hw_primary(3094): in->requested_rate:8000, pcm_config_in.rate:48000 in->config.channels=2
06-07 17:30:29.611: D/audio_hw_primary(3094): adev_open_input_stream: call echoReference_init(12)
06-07 17:30:29.611: V/echo_reference_processing(3094): echoReference_init +
06-07 17:30:29.621: I/audio_hw_primary(3094): adev_open_input_stream: input is null, set new input stream
06-07 17:30:29.621: I/AudioFlinger(3094): AudioFlinger's thread 0xecf00000 ready to run
06-07 17:30:29.651: E/(3094): Request requires android.permission.CAPTURE_AUDIO_OUTPUT
06-07 17:30:29.651: E/AudioPolicyIntefaceImpl(3094): getInputForAttr() permission denied: capture not allowed
06-07 17:30:29.661: V/audio_hw_primary(3094): stop_voice_note_recording
06-07 17:30:29.661: E/audio_hw_primary(3094): adev_close_input_stream, set jack_in to null
06-07 17:30:29.661: E/AudioRecord(3094): Could not get audio input for record source 4, sample rate 8000, format 1, channel mask 0x10, session 312, flags 0
06-07 17:30:29.671: E/StagefrightRecorder(3094): audio source is not initialized
06-07 17:30:29.671: E/MediaRecorder(11435): start failed: -2147483648

(source 4는 VOICE_CALL을 의미합니다)

당연히 manifest에 CAPTURE_AUDIO_OUTPUT을 넣어보았습니다만... 넣어도 똑같이 뜨구 있습니다.

이런경우 단말 자체에서 일반적인앱의 통화녹음 기능을 막아놓았다고 봐도 될까요??

audioSource를 MIC로 하면 녹음이 잘 됩니다. 물론 통화중에도 되긴하나 MIC에 대한거기때문에 내 목소리만 녹음이 되죠.

조언 부탁드립니다!

블랙이요블랙 (12,860 포인트) 님이 2016년 6월 7일 질문

1개의 답변

0 추천

CAPTURE_AUDIO_OUTPUT 권한이 시스템 권한이라

일반적인 방법으로는 권한을 획득할 수 없는 것으로 보입니다..

해당 권한의 프로텍션 레벨이 signature인데

시스템 어플리케이션 서명으로 빌드해야 작동할것 같네요.,,

https://census.tsyrklevich.net/permissions/android.permission.CAPTURE_AUDIO_OUTPUT

를 참조함시면, SM-G920F(해외 S6모델)의 CAPTURE_AUDIO_OUTPUT권한이 나오는데

system|signature 입니다.

모나미153 (17,540 포인트) 님이 2016년 6월 7일 답변
...