播放视频时,如果有来电、短信提示音、或者播放了其他声音,视频APP会失去audio focus,暂时不会再播放声音。
类似于下面的log:
// 使用MTK Gallery播放视频,Gallery会申请audio focus
06-27 09:21:48.069557 793 2795 I MediaFocusControl: requestAudioFocus() from uid/pid 10052/2823 clientId=android.media.AudioManager@9bc5373com.android.gallery3d.app.MovieActivity$1@48ec230 callingPack=com.android.gallery3d req=1 flags=0x0 sdk=26
// Gallery失去audio focus,此时Gallery不应该再播放声音。
06-27 09:22:00.090021 793 2795 I MediaFocusControl: abandonAudioFocus() from uid/pid 10052/2823 clientId=android.media.AudioManager@9bc5373com.android.gallery3d.app.MovieActivity$1@48ec230
如果重新再回到视频播放界面,视频没有声音,或者没有继续播放,可以检查main log,看视频APP是否有重新获取到audio focus,分为如下几种情况:
(1)如果打印abandonAudioFocus log,其他模块放弃了audio focus,但是视频APP没有来申请获取audio focus,需要找视频APP的厂商来确认代码逻辑,看有没有调用AudioManager.java的requestAudioFocus()函数来获取。
例如,使用MTK Gallery可以找MTK确认,使用第三方APP可以找对应的APP厂商确认。
(2)如果视频APP重新获取audio focus,但是获取不到,需要检查Audio framework的逻辑。常见的是,正在打电话时,其他APP会无法获取到audio focus。
对应代码可以查看AudioService.java的requestAudioFocus()函数,该函数再调用到MediaFocusControl.java的requestAudioFocus()函数。
在MediaFocusControl.java的requestAudioFocus()函数里面添加调试log来确认是在哪个return语句返回。