Android AudioManager类(必看)

来源:互联网 发布:java excel报表开发 编辑:程序博客网 时间:2024/06/03 21:19

  Android SDK提供了一个类来控制系统音量和振动的更改api,android.media.AudioManager 通过这个类,我们将手机设置为静音或者振动,和更改振动的类型。AudioManager无法在代码中实例化,需要通过AudioManager audiomanage = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);获取到其实例。audiomanager就是我们定义的声音的对象。,我们可以通过调用AudioManager的方法setRingerMode来控制声音的类型。setRingerMode方法接受一个参数,我们只要根据需要更改的类型值传入就可以拉。这3个分别是:

public static final int RINGER_MODE_SILENT = 0;//静音模式public static final int RINGER_MODE_VIBRATE = 1;//震动模式public static final int RINGER_MODE_NORMAL = 2; //普通

  一:audiomanager对象分析

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

 1.通话音量

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

 2.系统音量

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

 3.铃声音量

max = mAudioManager.getStreamMaxVolume( AudioManager.STREAM_RING);
current = mAudioManager.getStreamVolume(AudioManager.STREAM_RING );

 3.音乐音量

max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC );

 4.提示声音音量

max = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM );
current = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM );

另外需要知道的一些方法:

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(铃声), IN_CALL(通话)
setMode()——设置声音模式,可取值NORMAL(普通), RINGTONE(铃声), 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);


//关于标志flag 的用法:降低音量,调出系统音量控制

 
<span style="font-size:18px;">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);}</span>

  二:震动类型

  关于振动类型:

  1:VIBRATE_SETTING_ON //总是震动

  2:VIBRATE_SETTING_OFF  //从不震动

  3:VIBRATE_SETTING_ONLY_SILENT   //静音下震动

  4:VIBRATE_SETTING_ON  //非静音下震动


知道了这些类型,看看怎么实现。

int vibrate_setting = -1;int ring_mode = -1;switch(profile.vibrate) {case ProfileConstants.VIBRATE_ALWAYS_ON:// 总是振动vibrate_setting = AudioManager.VIBRATE_SETTING_ON;ring_mode = 1;break;case ProfileConstants.VIBRATE_NEVER://从不振动vibrate_setting = AudioManager.VIBRATE_SETTING_OFF;ring_mode = 0;break;case ProfileConstants.VIBRATE_ONLY_IN_SILENT://静音下振动vibrate_setting = AudioManager.VIBRATE_SETTING_ONLY_SILENT;ring_mode = 1;break;case ProfileConstants.VIBRATE_UNLESS_SILENT://非静音下振动vibrate_setting = AudioManager.VIBRATE_SETTING_ON;ring_mode = 0;break;}Settings.System.putInt(resolver, "vibrate_in_silent", ring_mode);audio.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, vibrate_setting);

这样以来我们就实现了和系统提供的振动类型相同的功能了。


0 0
原创粉丝点击