티스토리 뷰

 

 

안드로이드를 사용하다가 벨소리, 미디어가 아닌 알람 등을 조절하고 싶은 경우가 생긴다.

 

그럴경우에는 AudioManager 를 사용하여 조절할 수 있다.

 

아래에 있는 함수를 Activity 클래스 안에 추가해주면 벨소리에 대한 볼륨을 조절할 수 있다.

 

아래는 볼륨 조절 키를 통해 볼륨을 조절해주는 함수이다.

public boolean onKeyDown(int keyCode, KeyEvent event) {
     AudioManager mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);
     switch (keyCode) { 
     case KeyEvent.KEYCODE_VOLUME_UP :
      mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
      return true;         
     case KeyEvent.KEYCODE_VOLUME_DOWN:
      mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);
      return true;          
     case KeyEvent.KEYCODE_BACK:
      return true;         
     }         
     return false;
    } 

 

 

 

아래는 볼륨 조절 키를 눌렀을 때 자신이 원하는 특정 볼륨 값으로 고정시키는 함수이다.

 

 

public boolean onKeyDown(int keyCode, KeyEvent event) {
AudioManager mAudioManager = (AudioManager)getSystemService(AUDIO_SERVICE);//선언 후  
switch (keyCode) {
case KeyEvent.KEYCODE_VOLUME_UP :




 mAudioManager.setStreamVolume(AudioManager.STREAM_RING, 

                        (int)(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING) * 0.90), 

                        AudioManager.FLAG_PLAY_SOUND); 
// * 0.90 이 부분의 숫자에 맞춰 볼륨이 바뀝니다. (*0.25 이면 25%의 볼륨)



return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
// ring volume down
mAudioManager.setStreamVolume(AudioManager.STREAM_RING,

(int)(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING) * 0.25),

AudioManager.FLAG_PLAY_SOUND); return true;
case KeyEvent.KEYCODE_BACK:
return true;
}
return false;
}

 

이런식으로 자신이 원하는 값으로 볼륨을 조절할 수 있다.

 

참고로 (int)(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING) * 0.25) 로 적은 이유는

 

각각 벨소리, 미디어, 알람 등에 따라서 최대 음량이 다르기 때문에 각각의 최대볼륨의 퍼센트로 나타내었다. 

 

(예를들어 벨소리 max가 6이면 미디어는 15이고 이런식.. 그래서 고정된 int값으로는 원하는 표현을 하기 힘들어서 이렇게 한 것이다.)

 

그렇다면, 현재는 벨소리 볼륨을 조절하는데, 다른 볼륨을 조절하고 싶다면 어떻게 하면 될까?

 

 

Media Volume (Music/Video etc…)

AudioManager.STREAM_MUSIC

 

Ringtone Volume

AudioManager.STREAM_RING  

 

Alarm Volume

AudioManager.STREAM_ALARM 

 

Notification Volume

AudioManager.STREAM_NOTIFICATION

 

System Volume

AudioManager.STREAM_SYSTEM

 

Voicecall Volume

AudioManager.STREAM_VOICECALL

 

 

각각 해당하는 값을 위 코드의

 

 

      mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

 

또는 

 

 

 mAudioManager.setStreamVolume(AudioManager.STREAM_RING,

                        (int)(mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING) * 0.90),

                        AudioManager.FLAG_PLAY_SOUND);

 

 

에서 STREAM_RING 부분을 자신이 원하는 형태로 바꾸어 주면 된다.

 

참고로 시스템에서 지원해주는 단계로 한단계씩 움직이고 싶으면 adjustStreamVolume 를 사용해야하고

 

자신이 원하는 값으로 바꾸고 싶으면 setStreamVolume 를 써야한다.

 

 

 

 

댓글
최근에 올라온 글
최근에 달린 댓글
250x250