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

안드로이드 볼륨 조절 관련..

0 추천
헤드셋이 뽑힌 상태에서 헤드셋 뮤직 볼륨 설정을 하려하는데요~

안되네요 ㅜㅜ

 

볼륨이 헤드셋이 꼽혀있는 미디어볼륨, 일반 스피커 미디어 볼륨이 있잖아요?

그런데 설정할때는 단순히 MUSIC_STREAM(미디어볼륨)만 있지.. 추가적으로 헤드셋에 사용되는건지 스피커에 사용되는건지 나오질 않네요 ;;

 

옛날에는 SetRouting으로 설정이 됬는데 이것도 API4부터 금지가 됬군요..

해봤는데도 안되고요 ^^ ;;

 

이해하시는데 도움 되시라고 시나리오 남깁니다..

1) 헤드셋 연결시 특정 어플에서 미디어 볼륨을 최대로 설정 ( 설정 전에 가지고 있던 볼륨 값은 따로 저장..)

2 - 1) 그 어플을 종료할 시에는 디바이스 상에서 헤드셋이 꼽혀있는 상태이기에 잘 작동..

2 - 2) 어플 구동중에 헤드셋 연결 해제시에는... 시스템이 이미 헤드셋미디어->스피커미디어로 변경 한 후이기에.. 아까 저장해둔 값이 스피커미디어볼륨으로 설정되고 헤드셋미디어볼륨은 그대로 최대치 유지..;;;

 

볼륨 설정할때 헤드셋미디어로 접근할수 있는 방법이나.. 아니면 강제로 시스템에 '헤드셋연결중' 으로 바꾸는 법이라던지.. 도움부탁드려요~~
유키군 (260 포인트) 님이 2013년 4월 12일 질문

1개의 답변

0 추천

안드로이드 자체에 그런 기능 없는거 아닌가요?

일반적으로 이어폰 볼륨과 일반 볼륨을 나눠주는 기능을 지원하는 폰도 있고 아닌 폰도 있는걸로 알고 있습니다.

그런걸 미루어 봤을때 이어폰 연결시 브로드캐스트로 신호에 따라 볼륨을 조절하는 앱을 제조사별로 넣은게 아닌가 싶습니다.

뭐 그럼 방법은 이어폰 연결시 발생하는 브로드캐스트인 ACTION_HEADSET_PLUG 신호를 직접 처리해볼수밖에는 없겠군요.

만약 기본 설치앱에서 밀려서 기능 구현이 의도대로 안된다면 딜레이라도 줘야 하지 않을까 싶습니다.

Frog (3,910 포인트) 님이 2013년 4월 12일 답변
http://grepcode.com/에서 확인해 본 결과
안드로이드에서 기본적으로 구버전에서는 HeadsetObserver 에서 mAudioManager.setRouting(AudioManager.MODE_NORMAL, AudioManager.ROUTE_HEADSET, AudioManager.ROUTE_ALL);  이렇게 처리했더라구요 ~
추후 API4에서 setRouting이 사라지고 대체 할수 있는 메서드로 setWiredHeadsetOn(true); 을 사용할수 있었는데 이것도 API5에서 사라졌군요.. AudioManager 소스를 까봐도 저 두소스는
1048    public int getRouting(int mode) {
1049        return -1;
1050    }
867     @Deprecated public void setWiredHeadsetOn(boolean on){
868     }

이렇게 나오는구요.. 대신 헤드셋상태인지 확인하는 isWiredHeadsetOn은 아직 살아있구요 ;;
876     public boolean isWiredHeadsetOn() {
877         if (AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADSET,"")
878                 == AudioSystem.DEVICE_STATE_UNAVAILABLE &&
879             AudioSystem.getDeviceConnectionState(AudioSystem.DEVICE_OUT_WIRED_HEADPHONE,"")
880                 == AudioSystem.DEVICE_STATE_UNAVAILABLE) {
881             return false;
882         } else {
883             return true;
884         }
885     }

에구 ㅜㅜ 저 ACTION_HEADSET_PLUG도 헤드셋옵져버에서 날려주는거라 이미 다~ 처리하고 브로드캐스트를 보내는 것이더라구요 ; 뭐 날려봤자 protect broadcast라 에러나지만요 ㅜㅜ
...