美文网首页Android开发Android开发Android开发经验谈
记一次使用AudioFocusListener遇到的大坑

记一次使用AudioFocusListener遇到的大坑

作者: 大恐大恐龙 | 来源:发表于2018-05-27 08:15 被阅读6次

AudioFocus的使用比较简单,就是使用前申请焦点,使用后释放焦点,

使用过程中如果焦点被抢占,系统会给你的app发送通知。

常见的场景是这样的:

1 进程A当前持有焦点,现在进程B想播放声音,于是B要做下面的事情:

2 使用requestAudioFocus申请焦点,如果返回值是GAIN,表示申请成功,开始播放声音。

3 播完之后,调用abandonAudioFocus释放焦点

4 系统将焦点还回给进程A,进程A恢复播放

但是怪就怪在这个API:

public int requestAudioFocus(OnAudioFocusChangeListener l,int streamType,int durationHint)

public int abandonAudioFocus(AudioManager.OnAudioFocusChangeListener l)

requestAudioFocus 和 abandonAudioFocus 都带了一个Listener对象,在申请和释放焦点的时候,这个对象如果不一样会导致什么的情况?

答案就是在第4步,如果上述request和 abandon带的Listener不是一个对象,系统无法将焦点还回给A

也就是A不能自动播放。

有空从系统源码的角度分析一下这个原因

相关文章

网友评论

    本文标题:记一次使用AudioFocusListener遇到的大坑

    本文链接:https://www.haomeiwen.com/subject/sjzvjftx.html