1. 程式人生 > >解決Android中使用webview載入音視訊返回後還有聲音問題

解決Android中使用webview載入音視訊返回後還有聲音問題

問題:在開發中我們使用webview載入網頁播放音視訊後,當我們返回到上一頁後繼續播放

原因:在載入網頁播放音訊時,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();
    //重新載入
    mWebview.reload();
}

@Override
protected void onResume() {
    super.onResume();
    isPause=false;
}

@Override
protected void onPause() {
    super.onPause();
    isPause=true;
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mWebview.destroy();
    mAudioManager.abandonAudioFocus(audioFocusChangeListener);
}

private AudioManager.OnAudioFocusChangeListener audioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        HnLogUtils.e(TAG, "focusChange: " + 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) {
            HnLogUtils.e(TAG, "audio focus been granted");
    }
}