很多音乐播放器界面上都有一个音量seekbar,那么在android里面是如何实现的呢?
首先分析下要解决的问题:1.获取媒体播放的音量。
2.通过seekbar可以增减音量
3.用户按下音量键增减音量,seekbar保持同步
对于第一个问题:Android系统提供AudioManager类来获得系统audio服务。
对于第二个问题:实现seekBarChangeLIstener里面onProgressChanged方法。
对于第三个问题:用线程来同步更新UI。
设置音量的代码:
1 private void setVolum() 2 { 3 4 maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC); 5 volSeekBar.setMax(maxVolume); 6 currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC); 7 volSeekBar.setProgress(currentVolume); 8 mVolume.setText(currentVolume * 100 / maxVolume + " " ); 9 }
实现seekbar控制音量代码:
OnSeekBarChangeListener seekBarChangeListener = new OnSeekBarChangeListener() { public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { // TODO Auto-generated method stub mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0 ); } public void onStartTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } public void onStopTrackingTouch(SeekBar seekBar) { // TODO Auto-generated method stub } };
线程更新UI代码:
1 Handler myHandler = new Handler(){ 2 public void handleMessage(Message msg) { 3 switch (msg.what) { 4 case PROGRESS_CHANGED: 5 setVolum(); 6 /*sendEmptyMessageDelayed(PROGRESS_CHANGED, 200);*/ 7 break; 8 } 9 } 10 }; 11 12 class myVolThread implements Runnable { 13 public void run() { 14 while (!Thread.currentThread().isInterrupted()) { 15 16 Message message = new Message(); 17 message.what =PROGRESS_CHANGED; 18 MainActivity.this.myHandler.sendMessage(message); 19 try { 20 Thread.sleep(100); 21 } catch (InterruptedException e) { 22 Thread.currentThread().interrupt(); 23 } 24 } 25 } 26 }