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

마스터볼륨 조절관한 질문입니다.

0 추천
public class ChangeVolume extends Activity {
MediaPlayer mPlayer;
AudioManager mAm;
 
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.changevolume);
 
 
mAm = (AudioManager)getSystemService(AUDIO_SERVICE);
SeekBar seek = (SeekBar)findViewById(R.id.seekvolume);
seek.setMax(mAm.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
seek.setProgress(mAm.getStreamVolume(AudioManager.STREAM_MUSIC));
seek.setOnSeekBarChangeListener(mOnSeek);
}
 
 
SeekBar.OnSeekBarChangeListener mOnSeek = 
new SeekBar.OnSeekBarChangeListener() {
public void onProgressChanged(SeekBar seekBar, 
int progress, boolean fromUser) {
mAm.setStreamVolume(AudioManager.STREAM_MUSIC,
progress, 0);
}
 
public void onStartTrackingTouch(SeekBar seekBar) {
}
 
public void onStopTrackingTouch(SeekBar seekBar) {
}
};
 
public void onDestroy() {
super.onDestroy();
if (mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
}
 
 
우선 seekbar를 통해서 볼륨조절은 가능합니다
 
하지만 스마트폰의 볼륨조절버튼을 누르면 seekbar의 상태변화가 없는데요..
 
당최 갈피를 못잡겠습니다..  도와주세요!
알론소 (500 포인트) 님이 2015년 6월 18일 질문

1개의 답변

+1 추천
 
채택된 답변
안녕하세요.^^ 폰토스입니다.

키 이벤트 함수입니다.

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
switch(keyCode) {

case KeyEvent.KEYCODE_VOLUME_UP:

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

return true;

case KeyEvent.KEYCODE_VOLUME_DOWN:

mAm.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI);

return true;

default:
return false;

}

}

 

혹시 이 함수가 아닐런지요?
폰토스 (620 포인트) 님이 2015년 6월 18일 답변
폰토스님이 2015년 6월 20일 수정
답변 감사합니다!
근데 오류가 나서 물어봅니다!
audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

audio쪽에 빨간색언더바로 오류가 났는데요

혹시 관련 예제가 있는지 궁금합니다!
제 생각엔 이게 맞는거 같아요 여기서 seekbar의 상태를 조절하는게 맞는거 같은데.. 그걸 모르겠네요 ㅠㅡㅠ 그건 제가 차츰 해결해야할 숙제겠죠
답변 감사합니다!
안녕하세요.^^ 폰토스입니다.
답변이 늦었네요. ㅋ
글작성시 붙여넣기가 안되다보니 오타가 좀있었네요.
위의 소스를 public class ChangeVolume extends Activity { ..  }
여기  ..  부분 어딘가에 붙이시구요.
오류발생되면 조금 수정해주시면 됩니다.
audio는 임의의 변수인데요.
다른곳에 있는것을 붙이다 보니깐 저렇게 된거구요.
실제 사용은 내부 변수로 선언된 AudioManager mAm;
mAm.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);
이렇게 하셔야해요.

이클립스를 사용하신다면 AudioManager에 마우스 오른쪽 버튼눌러 메뉴가 나타나면 Open Declaration 또는 F3 누르셔서 AudioManager 클래스 내부에 어떤 변수가 있는지 확인해보시면 코드 작성에 많은 도움이 되십니다.
AudioManager 클래스 내부에 소스가 보이시지 않는다면 http://www.iefriends.co.kr 자료실 가셔서요.
94번 Eclipse에서 자바 디컴파일러 사용하기 누르셔서 따르하시면 완벽하지는 않지만 어느정도 소스 확인이 가능해져서 AudioManager 클래스 내부의 이런 저런 함수를 확인 가능해집니다.
...