1. 程式人生 > >安卓載入webView視訊頁面,退出後還有聲音

安卓載入webView視訊頁面,退出後還有聲音

做專案的時候遇到一個問題,就是安卓用webView載入視訊的頁面,銷燬當前頁面後,還是能聽到視訊播放的聲音,以此來記錄解決問題的方案。

嘗試過在onDestroy()方法中,呼叫webView.destroy()方法,銷燬它,但是沒效果。

參考了另外方法解決的,首先說一下產生這樣現象的原因是:在載入網頁播放音訊時,html5的audio/video 標籤將獲取系統播放音訊的焦點(類似將系統音訊管理的許可權給了標籤使用),返回後焦點未被改變,網頁任將獲取音訊的使用許可權,導致音視訊可能繼續在後臺播放。

解決方案:在介面被銷燬時,讓網頁的標籤失去焦點,失去對音訊的使用許可權。

直接上程式碼。

1.獲取音訊管理器

  private AudioManager  mAudioManager;
  private boolean isPause=false;

  mAudioManager= (AudioManager) getSystemService(Context.AUDIO_SERVICE); 
 

 2.在destory()中讓標籤失去焦點,讓應用自身獲取焦點。

@Override
protected void onRestart() {
    super.onRestart();
    //重新載入
    sportStartWeb.reload();
}
 
@Override
protected void onResume() {
    super.onResume();
    isPause=false;
}
 
@Override
protected void onPause() {
    super.onPause();
    isPause=true;
}
 
@Override
protected void onDestroy() {
    super.onDestroy();
    sportStartWeb.destroy();
    mAudioManager.abandonAudioFocus(audioFocusChangeListener);
}
 
private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        if (isPause && focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            requestAudioFocus();
        }
    }
};
 
//音訊控制元件獲取焦點
 
private void requestAudioFocus() {
    int result = mAudioManager.requestAudioFocus(audioFocusChangeListener,
            AudioManager.STREAM_MUSIC,
            AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
    if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
            Log.e(TAG, "audio focus been granted");
    }
}