AudioManager顾名思义,音频管理器,是Android中定义的类,方便我们设置手机中的各种音频。如多媒体音量获取和调节、设置铃声等。
获取AudioManager实例,调用Context中的方法:
AudioManager mManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);AUDIO_SERVICE获取AudioManager对象,该静态变量在Context中的定义如下。Context中还定义很多其它类型参数,这里不再详述。
/**
* 与 {@link #getSystemService(String)} 一起使用
* 获取{@link android.media.AudioManager}对象
* 用于处理音量,铃声模式和音频路由的管理。
*
* @see #getSystemService(String)
* @see android.media.AudioManager
*/
public static final String AUDIO_SERVICE = "audio";AudioManager类中定义了丰富的API,控制手机的各种音频。介绍一下常用的API和预定义的参数。
首先需要了解手机中有六类铃声:通话音、系统音、铃音、媒体音、闹钟音、通知音。这6种type铃声类型定义在AudioManager类中:
/** 通话音 */
public static final int STREAM_VOICE_CALL = AudioSystem.STREAM_VOICE_CALL;
/** 系统 */
public static final int STREAM_SYSTEM = AudioSystem.STREAM_SYSTEM;
/** 铃音 */
public static final int STREAM_RING = AudioSystem.STREAM_RING;
/** 媒体音 */
public static final int STREAM_MUSIC = AudioSystem.STREAM_MUSIC;
/** 闹钟音 */
public static final int STREAM_ALARM = AudioSystem.STREAM_ALARM;
/** 通知音 */
public static final int STREAM_NOTIFICATION = AudioSystem.STREAM_NOTIFICATION;①获取指定类型铃声的最大音量
mManager.getStreamMaxVolume(type)②获取指定类型铃声的当前音量
mManager.getStreamVolume(type)③获取指定类型铃声的响铃模式
mManager.getRingerMode()响铃模式有三种类型,也定义在AudioManager中:
/**
* 静音
*/
public static final int RINGER_MODE_SILENT = 0;
/**
* 震动
*/
public static final int RINGER_MODE_VIBRATE = 1;
/**
* 正常
*/
public static final int RINGER_MODE_NORMAL = 2;④设置指定类型铃声的响铃模式
mManager.setRingerMode(type)⑤setStreamVolume设置指定铃声的当前音量,设定具体数值
mManager.setStreamVolume(int streamType, int index, int flags)第一个参数streamType就是前面说到的6中铃声类型,第二个就是音量的数值。第三个flags表示调整音量过程中的附加动作,举个例子,更多可以去AudioManager中查看所有定义的flags:
/**
* 显示进度条
*/
public static final int FLAG_SHOW_UI = 1 << 0;
/**
* 更改音量时是否包括铃声模式作为可能的选项。
*/
public static final int FLAG_ALLOW_RINGER_MODES = 1 << 1;
/**
* 播放声音
*/
public static final int FLAG_PLAY_SOUND = 1 << 2;⑥adjustStreamVolume调整指定类型铃声的音量,不是设置具体的数值
mManager.adjustStreamVolume(int streamType, int direction, int flag第一个参数是铃声的类型,第二个参数是调整的策略,定义音量调整方向
/**
* 调大一级音量
*/
public static final int ADJUST_RAISE = 1;
/**
* 降低一级音量
*/
public static final int ADJUST_LOWER = -1;
/**
*音量保持不变
*/
public static final int ADJUST_SAME = 0;
/**
* 静音
*/
public static final int ADJUST_MUTE = -100;
/**
* 取消静音
*/
public static final int ADJUST_UNMUTE = 100;
/**
* 原来不是静音=>静音;原来是静音=>静音
*/
public static final int ADJUST_TOGGLE_MUTE = 101;与adjustStreamVolume方法有一个相似的方法adjustVolume,少了第一个参数,不需要设定具体的铃声类型,设定默认类型的铃声:
adjustVolume(int direction, int flags)Demo:

参考博客:

