关于 webView 加载的的网页中加载一些音频文件,退出的时候无法关闭的问题,网上一堆的解决方案,但是都没有解决我的问题。我们的界面是一个很特殊的情况,在 onDestory 的时候,不能立刻关闭 WebView( myWebView.destroy();myWebView = null;)
后期各种尝试,都没法关闭,最后想到了用系统的音频管理来处理这个问题,没想到还真的可以,下面直接放代码:
- if (audioManager == null) {
- audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
- }
- /**系统音频控制权限,AUDIOFOCUS_GAIN_TRANSIENT 短暂获取**/
- int result = audioManager.requestAudioFocus(adfocusChangeListener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
- /**AUDIOFOCUS_REQUEST_GRANTED 标识拿到控制,然后再将监听释放**/
- if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
- if (audioManager != null) {
- audioManager.abandonAudioFocus(adfocusChangeListener);
- }
- }
- /**
- * 获取音频焦点
- **/
- private AudioManager.OnAudioFocusChangeListener adfocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
- public void onAudioFocusChange(int focusChange) {
- }
- };
onAudioFocusChange() 方法的 focusChange 参数指示了该 AudioFocus 的竞争者对 AudioFocus 的拥有情况,取值如下: AUDIOFOCUS_GAIN:获得了 Audio Focus; AUDIOFOCUS_LOSS:失去了 Audio Focus,并将会持续很长的时间。这里因为可能会停掉很长时间,所以不仅仅要停止 Audio 的播放,最好直接释放掉 Media 资源。而因为停止播放 Audio 的时间会很长,如果程序因为这个原因而失去 AudioFocus,最好不要让它再次自动获得 AudioFocus 而继续播放,不然突然冒出来的声音会让用户感觉莫名其妙,感受很不好。这里直接放弃 AudioFocus,当然也不用再侦听远程播放控制【如下面代码的处理】。要再次播放,除非用户再在界面上点击开始播放,才重新初始化 Media,进行播放。 AUDIOFOCUS_LOSS_TRANSIENT:暂时失去 Audio Focus,并会很快再次获得。必须停止 Audio 的播放,但是因为可能会很快再次获得 AudioFocus,这里可以不释放 Media 资源; AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK :暂时失去 AudioFocus,但是可以继续播放,不过要在降低音量。
来源: http://www.bubuko.com/infodetail-2430490.html