Android音量調節
阿新 • • 發佈:2018-11-03
概念
Android手機每按一次音量+/-,音量的增加/減小幅度,這個我們稱為:系統的音量步進值
音量還有一定的範圍,系統的是:0到Max,Max不確定,這個稱為:系統的音量範圍
在Android中,是有幾種型別的音量可以調節:
- STREAM_ALARM 警報
- STREAM_MUSIC 音樂回放即媒體音量
- STREAM_RING 鈴聲
- STREAM_SYSTEM 系統
- STREAM_VOICE_CALL 通話
栗子:seekbar控制媒體音量
public class SoundActivity extends AppCompatActivity { private SeekBar seekBar; private TextView tv_sound; private AudioManager mAudioManager; private int maxVolume,currentVolume; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sound); seekBar = findViewById(R.id.seekbar); tv_sound = findViewById(R.id.tv_sound); //獲取系統的Audio管理者 mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //最大音量 maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); //當前音量 currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); //seekbar設定最大值為最大音量,這樣設定當前進度時不用換算百分比了 seekBar.setMax(maxVolume); //seekbar設定當前進度為當前音量 setView(); //seekbar設定拖動監聽 seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { public void onProgressChanged(SeekBar arg0,int progress,boolean fromUser) { //設定媒體音量為當前seekbar進度 mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0); currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); setView(); } @Override public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } @Override public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } }); } /* * onkeydown 事件會在使用者按下一個鍵盤按鍵時發生 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_DOWN: if(--currentVolume>=0){ setView(); }else { currentVolume = 0; } return true; case KeyEvent.KEYCODE_VOLUME_UP: if(++currentVolume<=maxVolume){ setView(); }else{ currentVolume = maxVolume; } return true; case KeyEvent.KEYCODE_VOLUME_MUTE: setView(); return true; } return super.onKeyDown(keyCode, event); } private void setView(){ tv_sound.setText(currentVolume+""); seekBar.setProgress(currentVolume); } }