2013-01-18 2 views
7

AudioTrack을 사용하여 UDP 소켓을 통해 수신되는 사운드를 재생하고 있습니다. 사운드와 함께 많은 노이즈가 발생하여 AudioManager를 사용하기로 결정했습니다. 그러나 AudioManager는 사운드 라우팅을 응용 프로그램 경계를 넘어서 변경합니다. 아래는 내가 사용하고있는 코드입니다.AudioTrack을 AudioManager setSpeakerphoneOn과 함께 사용하십시오.

 m_amAudioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE); 
     m_amAudioManager.setMode(AudioManager.MODE_IN_CALL); 
     m_amAudioManager.setSpeakerphoneOn(false); 

이 코드의 문제는 내가 응용 프로그램을 닫고 음악 플레이어를 시작할 때 소리가 프론트 스피커가 아닌 ususal 백 스피커에서오고 어떻게 든 그것을 바꿀 수 없다는 것입니다. 이 문제를 해결하기 위해 앱을 닫을 때 다음 줄을 추가하기로 결정했습니다.

m_amAudioManager.setSpeakerphoneOn(true); 

그러나 문제는 내가 전화 (일반 전화)을받을 때, 기본적으로 스피커가 켜져 있는지입니다이 줄

. 제발이 일에 정말로 도움이 필요해.

답변

12

먼저 AudioManager 설정을 변경하려면 매니페스트에서 MODIFY_AUDIO_SETTINGS 사용자 권한을 선언해야합니다. 당신이 어떤 설정을 변경하기 전에

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
  1. , 당신은 현재 AudioManager 설정을 저장해야합니다! 그리고 마무리에

    audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT); 
    audioManager.setMode(AudioManager.MODE_NORMAL); 
    audioManager.setSpeakerphoneOn(true); 
    
  2. oldAudioMode = audioManager.getMode(); 
    oldRingerMode = audioManager.getRingerMode(); 
    isSpeakerPhoneOn = audioManager.isSpeakerphoneOn(); 
    
  3. 적용하여 오디오 설정 (예), 응용 프로그램을 닫을 때이 설정 설정

    audioManager.setSpeakerphoneOn(isSpeakerPhoneOn); 
    audioManager.setMode(oldAudioMode); 
    audioManager.setRingerMode(oldRingerMode); 
    
+0

답장을 보내 주셔서 감사합니다. 나는이 허가를 사용했다. 그리고 내 문제 중 하나를 수정했습니다. 스피커는 더 이상 기본적으로 켜져 있지 않습니다. 그러나이 코드를 사용하여 음악 플레이어를 실행하려고 시도하고 프론트 스피커에서 실행되기 시작했습니다. 어떤 생각을 기본 설정으로 변경하는 방법이 있습니까? – SoH

+0

기본값은 앱을 시작하기 전에 기기 사용자가 설정 한 기본값입니다. 요점은 AudioManager 설정을 복원하기 전의 상태로 복원하는 것입니다. 따라서 앱이 시작되기 전에 speakerPhone이 꺼져 있으면 앱이 중지 될 때 해제됩니다. – TouchBoarder

+0

AudioTrack을 시작한 후 모드를 변경하면 @hsigmond는 괜찮습니까? – onmyway133

1

를 복원합니다.

m_amAudioManager.setMode (AudioManager.MODE_NORMAL);