很多音乐播放器界面上都有一个音量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 }

最后贴上MainActivity代码:

view source print ?
01 public class MainActivity extends Activity {
02
03 protected static final int PROGRESS_CHANGED = 0x101;
04 private SeekBar volSeekBar ;
05 private TextView mVolume ;
06 private AudioManager mAudioManager;
07 private int maxVolume, currentVolume;
08
09 Thread myVolThread = null;
10 Handler myHandler = new Handler(){
11 public void handleMessage(Message msg) {
12 switch (msg.what) {
13 case PROGRESS_CHANGED:
14 setVolum();
15 /*sendEmptyMessageDelayed(PROGRESS_CHANGED, 200);*/
16 break;
17 }
18 }
19 };
20 public void onCreate(Bundle savedInstanceState) {
21 super.onCreate(savedInstanceState);
22 setContentView(R.layout.main);
23
24 volSeekBar= (SeekBar)findViewById(R.id.volum_seek);
25 mVolume = (TextView)findViewById(R.id.volum_val);
26 mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
27
28 //setVolum();
29 OnSeekBarChangeListener seekBarChangeListener = new OnSeekBarChangeListener()
30 {
31
32 public void onProgressChanged(SeekBar seekBar, int progress,
33 boolean fromUser) {
34 // TODO Auto-generated method stub
35 mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, progress, 0);
36 }
37
38 public void onStartTrackingTouch(SeekBar seekBar) {
39 // TODO Auto-generated method stub
40
41 }
42
43 public void onStopTrackingTouch(SeekBar seekBar) {
44 // TODO Auto-generated method stub
45
46 }
47
48 };
49
50 volSeekBar.setOnSeekBarChangeListener(seekBarChangeListener);
51 new Thread(new myVolThread()).start();
52
53 }
54 private void setVolum()
55 {
56
57 maxVolume = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
58 volSeekBar.setMax(maxVolume);
59 currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
60 volSeekBar.setProgress(currentVolume);
61 mVolume.setText(currentVolume*100/maxVolume + " ");
62 }
63
64 class myVolThread implements Runnable {
65 public void run() {
66 while (!Thread.currentThread().isInterrupted()) {
67
68 Message message = new Message();
69 message.what =PROGRESS_CHANGED;
70 MainActivity.this.myHandler.sendMessage(message);
71 try {
72 Thread.sleep(100);
73 } catch (InterruptedException e) {
74 Thread.currentThread().interrupt();
75 }
76 }
77 }
78 }
79 }

更多相关文章

  1. Android中向webview注入js代码
  2. Android手机拨打电话、手动发送短信与自动拨打电话、自动发送短
  3. Android SDK编译 ——如何将自己源代码加入android.jar
  4. Android 高级混淆和代码保护技术
  5. Android Audio代码分析1 - AudioTrack使用示例
  6. Android 动态加载APK--代码安装、获取资源及Intent调用已安装apk
  7. Android 中颜色对应的代码集合
  8. 《Android 编程权威指南》(Android Programming The Big Nerd Ran
  9. 美团,大众点评,悬浮窗功能代码

随机推荐

  1. android初始化部分:how to java2Cpp
  2. 2.2.1 LinearLayout(线性布局)
  3. [置顶] Big Planet Tracks 一个不错的 An
  4. 在Android中使用Google map
  5. Android Studio v0.1试用
  6. Android笔记(1)——不同apk之间传递参数与
  7. android关于快捷方式的检测和添加
  8. Android 中文 API (90) ―― WindowManag
  9. Android通知Notification详解
  10. GPS 研究一 (Android2.3)