android AudioManager类介绍

AudioManager类位于android.Media 包中,该类提供访问控制音量和钤声模式的操作。

通过getSystemService(Context.AUDIO_SERVICE)方法获得AudioManager实例对象。

AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);

audiomanager就是我们定义的控制系统声音的对象。


这里只讲述几个比较常用到的方法:

adjustVolume(int direction, int flags) ——用来控制手机音量大小,当传入的第一个参数为AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入AudioManager.ADJUST_RAISE时,则可以将音量调大一个单位。

adjustStreamVolume(int streamType, int direction, intflags)——(以步长)调节手机音量大小
参数1:声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)
参数2:调整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME
参数3:可选的标志位

setStreamVolume(int streamType, int index, intflags)——直接设置音量大小


getMode() ——返回当前音频模式,如 NORMAL(普通), RINGTONE(铃声), orIN_CALL(通话)

setMode()——设置声音模式,可取值NORMAL(普通), RINGTONE(铃声), or IN_CALL(通话)

getRingerMode()——返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)

setRingerMode(int ringerMode) ——改变铃声模式

getStreamVolume(int streamType)——取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

getStreamMaxVolume(int streamType)——获得当前手机最大铃声。

setStreamMute(int streamType, boolean state

//音量控制,初始化定义

AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

//最大音量

int maxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

//当前音量

int currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);



直接控制音量的多少:

1

2

3

4

5

if(isSilent){

  mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0, 0);

}else{

  mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume, 0);//tempVolume:音量绝对值

}

以一步步长控制音量的增减,并弹出系统默认音量控制条:

1

2

3

4

5

6

7

8

9

10

//降低音量,调出系统音量控制

if(flag ==0){

  mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER,

                            AudioManager.FX_FOCUS_NAVIGATION_UP);

}

//增加音量,调出系统音量控制

else if(flag ==1){

  mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE,

                            AudioManager.FX_FOCUS_NAVIGATION_UP);

}



常用方法:
android audioManager获取音量:

先获取AudioManager实例,
AudioManager mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

//通话音量

int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL ); 

int current = mAudioManager.getStreamVolume(AudioManager.STREAM_VOICE_CALL ); 

//系统音量

int max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_SYSTEM ); 

current = mAudioManager.getStreamVolume(AudioManager.STREAM_SYSTEM ); 

//铃声音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING); 

current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING ); 

//音乐音量

max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC ); 

current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC ); 


//提示声音音量

max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM ); 

current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM ); 

一个好的 Android 应用免不了会自带背景音乐,比如游戏或者一款比较不错的书本阅读器。一些好的应用在自带音乐的时候会多添加一款小功能即可以帮助用户设置声音大小或者改变应用的声音模式。


本篇基于 Android API 中的 AudioManager 作讲述,使看过本篇的读者可以迅速的掌握这个类的实现过程。下面是本篇大纲:


1、认识 AudioManager

2、AudioManager 主要方法介绍

3、程序逻辑实现过程

1、认识 AudioManager


AudioManager 类位于 android.Media 包中,该类提供访问控制音量和钤声模式的操作。


 


2、AudioManager 主要方法介绍


邮于 AudioManager 该类方法过多,这里只讲述几个比较常用到的方法:


方法:adjustVolume(int direction, int flags) 

解释:这个方法用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER 时,可将音量调小一个单位,传入 AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。

方法:getMode() 

解释:返回当前音频模式。

方法:getRingerMode() 

解释:返回当前的铃声模式。

方法:getStreamVolume(int streamType) 

解释:取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。

方法:setRingerMode(int ringerMode) 

解释:改变铃声模式

 


3、程序逻辑实现过程

界面上设置了一个图片,表示当前铃声状态,一个进度条表示当前音量大小,五个图片按钮,用来表示增加/减小音量、普通模式、静音模式和震动模式。下面是界面的 XML 布局代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><? xml  version = "1.0"  encoding = "utf-8" ?>
< AbsoluteLayout
   android:id = "@+id/layout1"
   android:layout_width = "fill_parent"
   android:layout_height = "fill_parent"
   android:background = "@drawable/white"
   xmlns:android = "http://schemas.android.com/apk/res/android"
>
   < TextView
     android:id = "@+id/myText1"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "@string/str_text1"
     android:textSize = "16sp"
     android:textColor = "@drawable/black"
     android:layout_x = "20px"
     android:layout_y = "42px"
   >
   </ TextView >
   < ImageView
     android:id = "@+id/myImage"
     android:layout_width = "48px"
     android:layout_height = "48px"
     android:layout_x = "110px"
     android:layout_y = "32px"
   >
   </ ImageView >
   < TextView
     android:id = "@+id/myText2"
     android:layout_width = "wrap_content"
     android:layout_height = "wrap_content"
     android:text = "@string/str_text2"
     android:textSize = "16sp"
     android:textColor = "@drawable/black"
     android:layout_x = "20px"
     android:layout_y = "102px"
   >
   </ TextView >
   < ProgressBar
     android:id = "@+id/myProgress"
     style = "?android:attr/progressBarStyleHorizontal"
     android:layout_width = "160dip"
     android:layout_height = "wrap_content"
     android:max = "7"
     android:progress = "5"
     android:layout_x = "110px"
     android:layout_y = "102px"
   >
   </ ProgressBar >
   < ImageButton
     android:id = "@+id/downButton"
     android:layout_width = "100px"
     android:layout_height = "100px"
     android:layout_x = "50px"
     android:layout_y = "162px"
     android:src = "@drawable/down"
   >
   </ ImageButton >
   < ImageButton
     android:id = "@+id/upButton"
     android:layout_width = "100px"
     android:layout_height = "100px"
     android:layout_x = "150px"
     android:layout_y = "162px"
     android:src = "@drawable/up"
   >
   </ ImageButton >
   < ImageButton
     android:id = "@+id/normalButton"
     android:layout_width = "60px"
     android:layout_height = "60px"
     android:layout_x = "50px"
     android:layout_y = "272px"
     android:src = "@drawable/normal"
   >
   </ ImageButton >
   < ImageButton
     android:id = "@+id/muteButton"
     android:layout_width = "60px"
     android:layout_height = "60px"
     android:layout_x = "120px"
     android:layout_y = "272px"
     android:src = "@drawable/mute"
   >
   </ ImageButton >
   < ImageButton
     android:id = "@+id/vibrateButton"
     android:layout_width = "60px"
     android:layout_height = "60px"
     android:layout_x = "190px"
     android:layout_y = "272px"
     android:src = "@drawable/vibrate"
   >
   </ ImageButton >
</ AbsoluteLayout >

程序类分别为:

1、viewHolder
界面上的所有控件和元素都在这里静态声明

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Code highlighting produced by Actipro CodeHighlighter (freeware)http: //www.CodeHighlighter.com/-->package com.terry;
  
import  android.media.AudioManager;
import  android.widget.ImageButton;
import  android.widget.ImageView;
import  android.widget.ProgressBar;
 
public  class  viewHolder {
 
     public  static  ImageButton downButton;
     public  static  ImageButton upButton;
     public  static  ImageButton normalButton;
     public  static  ImageButton muteButton;
     public  static  ImageButton vibrateButton;
     public  static  ProgressBar myProgressBar;
     
     public  static  ImageView myImageView;
     
     public  static  AudioManager audiomanage;
}

 2、AudioManagerActivity

  程序入口处,和主要逻辑代码的处理,程序开头以 (AudioManager)getSystemService(AUDIO_SERVICE); 取得 AudioManager 对象。然后再利用该对象来对铃声进行调整。声明了一个返回 ImageButton 的方法,用来处理各自按钮点击所执行的不同事件和对图片的状态进行调整设置。以下把代码提供给大家:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
Code highlighting produced by Actipro CodeHighlighter (freeware)http: //www.CodeHighlighter.com/-->package com.terry;
 
import  android.app.Activity;
import  android.media.AudioManager;
import  android.os.Bundle;
import  android.view.View;
import  android.view.View.OnClickListener; 
import  android.widget.ImageButton;
import  android.widget.ImageView;
import  android.widget.ProgressBar;
 
public  class  AudioManagerActivity  extends  Activity {
     //音量变量
     private  int  volume= 0 ;
     //声音模式
     private  int  mode;
     /** Called when the activity is first created. */
     @Override
     public  void  onCreate(Bundle savedInstanceState) {
         super .onCreate(savedInstanceState);
         setContentView(R.layout.main);
         findview();
         //通过getStreamVolume 获得当前音量大小
         volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
         //把当前音量的值 设置给进度条
         viewHolder.myProgressBar.setProgress(volume);
         //得到当前的声音模式
         mode=viewHolder.audiomanage.getRingerMode();
         setImageState();
         viewHolder.downButton=btnListener(viewHolder.downButton);
         viewHolder.upButton=btnListener(viewHolder.upButton);
         viewHolder.muteButton=btnListener(viewHolder.muteButton);
         viewHolder.normalButton=btnListener(viewHolder.normalButton);
         viewHolder.vibrateButton=btnListener(viewHolder.vibrateButton);
     }
     
     //找到控件
     void  findview(){
         viewHolder.downButton=(ImageButton)findViewById(R.id.downButton);
         viewHolder.upButton=(ImageButton)findViewById(R.id.upButton);
         viewHolder.muteButton=(ImageButton)findViewById(R.id.muteButton);
         viewHolder.normalButton=(ImageButton)findViewById(R.id.normalButton);
         viewHolder.vibrateButton=(ImageButton)findViewById(R.id.vibrateButton);
         viewHolder.myImageView=(ImageView)findViewById(R.id.myImage);
         viewHolder.myProgressBar=(ProgressBar)findViewById(R.id.myProgress);
         viewHolder.audiomanage=(AudioManager)getSystemService(AUDIO_SERVICE);
     }
     
     
     //按钮 的单击事件
     ImageButton btnListener(ImageButton b){
         b.setOnClickListener( new  OnClickListener() {
             
             @Override
             public  void  onClick(View v) {
                 // TODO Auto-generated method stub
                 switch  (v.getId()) {
                 case  R.id.downButton:
                     viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_LOWER,   0 );
                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
                     viewHolder.myProgressBar.setProgress(volume);
                     mode=viewHolder.audiomanage.getRingerMode();
                     setImageState();
                     break ;
                 case  R.id.upButton:
                     viewHolder.audiomanage.adjustVolume(AudioManager.ADJUST_RAISE,  0 );
                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
                     viewHolder.myProgressBar.setProgress(volume);
                     mode=viewHolder.audiomanage.getRingerMode();
                     setImageState();
                     break ;
                 case  R.id.muteButton:
                      viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_SILENT);
                      volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
                      viewHolder.myProgressBar.setProgress(volume);
                      viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
                     break ;
                 case  R.id.normalButton:
                     viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
                     viewHolder.myProgressBar.setProgress(volume);
                     viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
                     break ;
                 case  R.id.vibrateButton:
                     viewHolder.audiomanage.setRingerMode(AudioManager.RINGER_MODE_VIBRATE);
                     volume=viewHolder.audiomanage.getStreamVolume(AudioManager.STREAM_RING);
                     viewHolder.myProgressBar.setProgress(volume);
                     viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
                     break ;
                 }
                 
             }
         });
         return  b;
     }
     
      //设置图片状态 
     void  setImageState(){
         if (mode==AudioManager.RINGER_MODE_NORMAL)
         {
             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.normal));
         }
         else  if (mode==AudioManager.RINGER_MODE_SILENT)
         {
             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.mute));
         }
         else  if (mode==AudioManager.RINGER_MODE_VIBRATE)
         {
             viewHolder.myImageView.setImageDrawable(getResources().getDrawable(R.drawable.vibrate));
         }
     }
}
转载自  开源中国

原味链接:http://my.oschina.net/chuiyuan/blog/268811点击打开链接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值