AudioManager相关知识
一、介绍:系统服务的一种,主要用于获取特定音频的焦点,对音频进行设置
二、使用场景示例:
- 接听电话时,可以短暂获取焦点,使其他音频暂时停止播放。
- 拨打电话时可以获取焦点,拨打结束释放焦点。
- 录制语音、发送语音时获取焦点,使其他音频暂停,录制结束或发送结束后释放焦点,其他音频继续播放。
三、获取AudioManager
AudioManager am = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
四、AudioManager常用方法简介
方法 | 功能 |
---|---|
int requestAudioFocus(AudioManager.OnAudioFocusChangeListener listener,int streamType,int durationHint) | 请求音频的焦点 |
void adjustStreamVolume(int streamType,int direction,int flags) | 调整手机指定类型的声音大小 |
void setMicrophoneMute(boolean on) | 设置是否让麦克风静音,true为静音 |
void setMode(int mode) | 设置声音模式 |
void setRingerMode(int ringerMode) | 设置手机电话铃声的模式 |
void setSpeakerphoneOn(boolean on) | 设置扬声器打开或关闭,免提效果,true为打开 |
void setStreamMute(int streamType,boolean state) | 将手机的指定类型的声音调整为静音 |
void setStremVolume(int streamTypemboolean state) | 设置手机的指定类型的音量值 |
五、参数及类型
- 申请焦点:int requestAudioFocus(AudioManager.OnAudioFocusChangeListener listener,int streamType,int durationHint)
-
listener :音频状态改变监听
-
streamType:音频类型。值为
- AudioManager.STREAM_ALARM:手机闹钟
- AudioManager.STREAM_RING:电话铃声
- AudioManager.STREAM_MUSIC:手机音乐
- AudioManager.STREAM_SYSTEM:手机系统
- AudioManager.STREAM_DTMF:音调
- AudioManger.STREAM_NOTIFICATION:系统提示
- AudioManager.STREAM_VOICE_CALL:语音电话
-
durationHint:音频焦点状态
1.1 获得焦点- AudioManager.AUDIOFOCUS_GAIN:应用获得AudioFocus;执行操作,播放或继续播放;失去焦点后会停止播放并释放资源。
- AUDIOFOCUS_GAIN_TRANSIENT:暂时获取焦点,用于短暂的音频;失去焦点后只会暂停播放。
- AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK:应用与其他应用共用焦点,但播放时其他应,用会降低音量;失去焦点后会继续播放,但音量降低。
1.2 失去焦点
- AudioManager.AUDIOFOCUS_LOSS:应用失去了AudioFocus;执行操作:暂停播放。建议这时释放Media资源
- AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:暂时时去AudioFocus,并会很快获得焦点 ,需要暂停播放,但可以不释放资源
- FOCUS_LOSS_TRANSIENT_CAN_DUCK:暂时失去AudioFocus,但可以继续播放,但音量需要降低。
- 返回值:
AUDIOFOCUS_REQUEST_GRANTED:申请成功;
AUDIOFOCUS_REQUEST_FAILED:申请失败。
-
- 放弃焦点
abandonAudioFocus(AudioManager.OnAudioFocusChangeListener listener)
六、音频使用思路
- MyApp申请焦点进行音频播放 -> MyAPP播放中 -> 其他 APP申请焦点播放 -> MyApp失去焦点导致暂停播放 -> 其他APP播放
- 其他APP播放结束释放焦点 -> MyApp重新获得音频焦点,继续播放