AudioManager最主要的是它能控制声音和铃声
这里只讲述几个比较常用到的方法:
adjustVolume(intdirection, int flags) ——用来控制手机音量大小,当传入的第一个参数为 AudioManager.ADJUST_LOWER时,可将音量调小一个单位,传入AudioManager.ADJUST_RAISE 时,则可以将音量调大一个单位。
adjustStreamVolume(intstreamType, int direction, int flags)——(以步长)调节手机音量大小
参数1:声音类型,可取为STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)
参数2:调整音量的方向,可取ADJUST_LOWER(降低)、ADJUST_RAISE(升高)、ADJUST_SAME
参数3:可选的标志位
setStreamVolume(intstreamType, int index, int flags)——直接设置音量大小
getMode() ——返回当前音频模式,如NORMAL(普通), RINGTONE(铃声), or IN_CALL(通话)
setMode()——设置声音模式,可取值NORMAL(普通),RINGTONE(铃声), or IN_CALL(通话)
getRingerMode()——返回当前的铃声模式。如RINGER_MODE_NORMAL(普通)、RINGER_MODE_SILENT(静音)、RINGER_MODE_VIBRATE(震动)
setRingerMode(intringerMode) ——改变铃声模式
getStreamVolume(intstreamType) ——取得当前手机的音量,最大值为7,最小值为0,当为0时,手机自动将模式调整为“震动模式”。
getStreamMaxVolume(intstreamType)——获得当前手机最大铃声。
setStreamMute(intstreamType, boolean state)
//音量控制,初始化定义
AudioManagermAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
//最大音量
int maxVolume =mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
//当前音量
int currentVolume =mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
直接控制音量的多少:
以一步步长控制音量的增减,并弹出系统默认音量控制条:
//降低音量,调出系统音量控制
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);
}
常用方法:
androidaudioManager获取音量:
先获取AudioManager实例,
AudioManagermAudioManager = (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 );
(7)处理Audio硬件设备
查找正在使用的声音设备
if(isBluetoothA2dpOn()) {
// Adjust output forBluetooth.
} else if(isSpeakerphoneOn()) {
// Adjust output forSpeakerphone.
} else if(isWiredHeadsetOn()) {
// Adjust output for headsets
} else {
// If audio plays and noone can hearit, is it still playing?
}
当耳机设备或蓝牙设备断开连接之后,Audio设备自动切换到喇叭,会发送ACTION_AUDIO_BECOMING_NOISY 广播,注册一个广播接收者用于接收该 广播就可以控制声音播放
private classNoisyAudioStreamReceiver extends BroadcastReceiver {
@Override
public void onReceive(Contextcontext, Intent intent) {
if(AudioManager.ACTION_AUDIO_BECOMING_NOISY.equals(intent.getAction())) {
// Pause the playback
}
}
}
private IntentFilterintentFilter = newIntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);
private voidstartPlayback() {
registerReceiver(myNoisyAudioStreamReceiver(), intentFilter);
}
private voidstopPlayback() {
unregisterReceiver(myNoisyAudioStreamReceiver);
}