안드로이드 개발 질문/답변
(글 수 40,700)
처음으로 질문 올리는 것 같네요.
제가 개발 중인 어플에 전화 음소거 기능을 넣을려고 하는데요.
이게 쉽게 안되네요. 뭐가 문제인지 고수님들의 도움 부탁드립니다.
일단 전화를 자동으로 받는 Service 클래스를 만들었구요.
이 안에서 전화 상태를 확인하는 Listener를 추가했습니다.
그리고 전화를 받으면서 전화의 음소거를 하려고 하는데요.
하지만 전화의 음소거가 안되네요. ㅡ,.ㅡ;;
무엇이 잘 못 된 것인지 아니면 버그가 있는것인지?????
구글링을 해도 해결책을 못 찾아서요... 도와주세요~~~ ^^
추가로 API를 확인하니... 이런 문구가 있던데요...
"This method should only be used by applications that replace the platform-wide management of audio settings or the main telephony application."
어떠한 의미인지 모르겠네요.
의미를 모른다는 것이 단순히 해석이 안된다는 것은 아니구요.
프로그램적으로 어떻게 해야하는지를 모르겠네요...
그럼 많은 도움 부탁드립니다.
감사합니다.
제가 개발 중인 어플에 전화 음소거 기능을 넣을려고 하는데요.
이게 쉽게 안되네요. 뭐가 문제인지 고수님들의 도움 부탁드립니다.
일단 전화를 자동으로 받는 Service 클래스를 만들었구요.
이 안에서 전화 상태를 확인하는 Listener를 추가했습니다.
private class MyPhoneStateListener extends PhoneStateListener { public void onCallStateChanged(int state, String incomingNumber) { switch (state) { case TelephonyManager.CALL_STATE_RINGING: { break; } case TelephonyManager.CALL_STATE_OFFHOOK: { microphoneMute(context, true); break; } case TelephonyManager.CALL_STATE_IDLE: { break; } default: break; } } } private void microphoneMute(Context context, boolean onoff) { AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); audioManager.setMicrophoneMute(onoff); }
그리고 전화를 받으면서 전화의 음소거를 하려고 하는데요.
하지만 전화의 음소거가 안되네요. ㅡ,.ㅡ;;
무엇이 잘 못 된 것인지 아니면 버그가 있는것인지?????
구글링을 해도 해결책을 못 찾아서요... 도와주세요~~~ ^^
추가로 API를 확인하니... 이런 문구가 있던데요...
"This method should only be used by applications that replace the platform-wide management of audio settings or the main telephony application."
어떠한 의미인지 모르겠네요.
의미를 모른다는 것이 단순히 해석이 안된다는 것은 아니구요.
프로그램적으로 어떻게 해야하는지를 모르겠네요...
그럼 많은 도움 부탁드립니다.
감사합니다.
2010.12.15 13:49:30
이미 몇 달이나 지났지만 혹시 찾으시는 분이 있을 까봐 의견 올립니다.
AudioManager의 setMicrophoneMute 라던가 setStreamMute 같은 함수들은 폰의 설정값을 바꿔버리는 함수이기 때문에
특별한 permission이 있어야 합니다.
AndroidMenifest.xml 에서
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION"></uses-permission>
위와 같이 configuration change permission을 줘야 합니다.
저는 setMicrophoneMute 함수는 안써봐서 확실히 모르겠지만
setStreamMute (이건 써봤음) 이 함수와 같은 계열의 함수이므로 다르지 않으리라고 생각합니다.
해석이 안된다고 하신 부분이 그 뜻입니다.
폰 설정을 바꿔버리기 때문에 함부로 쓰지 말라는 것이지요.
무슨 말이냐면 만약
AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);;
am.setStreamMute(AudioManager.STREAM_MUSIC, true);
위와 같이 설정해서 음악, 동영상 따위가 출력되는 stream을 꺼버리면
해당 어플을 종료하고 난 뒤에 다른 어플을 실행하셔도 음악, 동영상이 mute 되어버립니다.
폰 설정이 바뀌는 거죠.
그래서 이런 프로그램은 끝나기 전에
OnPause 같은 곳에
AudioManager am = (AudioManager)this.getSystemService(Context.AUDIO_SERVICE);;
am.setStreamMute(AudioManager.STREAM_MUSIC, false);
이런식으로 다시 stream을 켜주는 설정을 해줘야 합니다.