webview播放網絡視頻

根據開發需求,需要在app中加載網絡上的視頻。本來是挺簡單的一件事,webview.loadUrl(視頻地址),但是在處理全屏的時候總是失敗。

下面用代碼說話:

//全屏顯示的視圖對象
    private View mFullVideoView;
    //一個通知webview退出全屏的回調接口
    private WebChromeClient.CustomViewCallback mCustomViewCallback;
    private void initWebview() {
        mWebView = (WebView) findViewById(R.id.wv_load_web);
        final WebSettings settings = mWebView.getSettings();
        settings.setCacheMode(WebSettings.LOAD_DEFAULT);
        settings.setAppCacheEnabled(true);
        settings.setDatabaseEnabled(true);
        settings.setDomStorageEnabled(true);
        settings.setJavaScriptEnabled(true);
        settings.setLoadsImagesAutomatically(true);

        mWebView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }

            @Override
            public void onShowCustomView(View view, CustomViewCallback callback) {
//                super.onShowCustomView(view, callback);
                //改變屏幕方向,SCREEN_ORIENTATION_LANDSCAPE--橫排,SCREEN_ORIENTATION_PORTRAIT--豎排
                MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                mWebView.setVisibility(View.GONE);
                //判斷mFullVideoView是否爲空,來判斷是否處於全屏狀態
                if (mFullVideoView != null){
                    callback.onCustomViewHidden();
                    return;
                }
                //把全屏顯示的視圖對象添加到佈局
                mFrameLayout.addView(view);
                mFrameLayout.setVisibility(View.VISIBLE);
                //獲取全屏顯示視圖對象
                mFullVideoView = view;
                //退出全屏的回調接口
                mCustomViewCallback = callback;
                mActionBar.hide();
                getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

            }

            //關閉全屏顯示
            @Override
            public void onHideCustomView() {
//                super.onHideCustomView();
                
                if (mFullVideoView == null){
                    return;
                }
                //設置屏幕豎排
                MainActivity.this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                //隱藏全局佈局
                mFrameLayout.setVisibility(View.GONE);
                //移除全屏顯示的視圖對象
                mFrameLayout.removeView(mFullVideoView);
                mFullVideoView = null;
                mCustomViewCallback.onCustomViewHidden();
                mWebView.setVisibility(View.VISIBLE);
                mCustomViewCallback = null;

            }
代碼沒有問題,能夠實現全屏,但是橫屏後會重新加載onCreate()方法,使得整個界面又重新加載。解決辦法就是在配置文件中的activity中配置
android:configChanges="orientation|screenSize"屬性。
這樣就可以正常全屏播放視頻了。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章