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 |
|
以一步步长控制音量的增减,并弹出系统默认音量控制条:
1 2 3 4 5 6 7 8 9 10 |
|
常用方法:
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点击打开链接