android WebView音頻關閉的問題


關於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,但是可以繼續播放,不過要在降低音量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM