1. 程式人生 > >Android WebView頁面結束後視訊播放還有聲音問題處理

Android WebView頁面結束後視訊播放還有聲音問題處理

WebView載入帶有視訊的網頁時,點選視訊播放,然後退出,視訊總是會還在播放,未能及時結束。

查了很多都沒能解決,什麼webView的reload()、 onPause、pauseTimer();等方法都不行,有的第一次有效,第二次就無效了,後來又找了嘗試,終於找到一個可用的。在此記錄,希望幫助那些有同樣問題的朋友。

/**
     * 當Activity執行onPause()時讓WebView執行pause
     */ 
    @Override 
    protected void onPause() { 
        super.onPause(); 
        try { 
            if (mWebView != null) { 
                mWebView.getClass().getMethod("onPause").invoke(mWebView, (Object[]) null); 
                isOnPause = true; 
            } 
   
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
       
    /**
     * 當Activity執行onResume()時讓WebView執行resume
     */ 
    @Override 
    protected void onResume() { 
        super.onResume(); 
        try { 
            if (isOnPause) { 
                if (mWebView != null) { 
                    mWebView.getClass().getMethod("onResume").invoke(mWebView, (Object[]) null); 
                } 
                isOnPause = false; 
            } 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
       
    /**
     * 該處的處理尤為重要:
     * 應該在內建縮放控制元件消失以後,再執行mWebView.destroy()
     * 否則報錯WindowLeaked
     */ 
    @Override 
    protected void onDestroy() { 
        super.onDestroy(); 
        if (mWebView != null) { 
            mWebView.getSettings().setBuiltInZoomControls(true); 
            mWebView.setVisibility(View.GONE); 
            long delayTime = ViewConfiguration.getZoomControlsTimeout(); 
            new Timer().schedule(new TimerTask() { 
                @Override 
                public void run() { 
                    mWebView.destroy(); 
                    mWebView = null; 
                } 
            }, delayTime); 
   
        } 
        isOnPause = false; 
    } 
來源: