Android webview don`t display video

0

Is android webview able to display mp4 video with video tag?

In my application, my webview need to display video in . But, my webview is displays only blackscreen(audio is working fine).

I`m working in Android API Level 29.

This is my code about settings of webview

mWebSettings = mWebView.getSettings();
        mWebSettings.setJavaScriptEnabled(true); 
        mWebSettings.setSupportMultipleWindows(true);
        mWebSettings.setJavaScriptCanOpenWindowsAutomatically(true); 
        mWebSettings.setLoadWithOverviewMode(true); 
        mWebSettings.setUseWideViewPort(true); 
        mWebSettings.setSupportZoom(true); 
        mWebSettings.setBuiltInZoomControls(true); 
        mWebSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); 
        mWebSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 
        mWebSettings.setDomStorageEnabled(true); 
        mWebSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
        mWebSettings.setMediaPlaybackRequiresUserGesture(false);
        mWebSettings.setPluginState(WebSettings.PluginState.ON);
        mWebSettings.setAllowUniversalAccessFromFileURLs(true);
        mWebSettings.setAllowFileAccessFromFileURLs(true);
        mWebSettings.setAllowFileAccess(true);

        mWebSettings.setUserAgentString("Mozilla/5.0 (Linux; Android 10; SM-A205U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.185 Mobile Safari/537.36");

        mWebView.setBackgroundColor(0x00000000);
        mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

mWebView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    view.loadUrl(request.getUrl().toString());
                }
                return super.shouldOverrideUrlLoading(view, request);
            }
        });

        mWebView.setWebChromeClient(new WebChromeClient() {
            @SuppressLint("SetJavaScriptEnabled")
            @Override
            public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
                // Dialog Create Code
                WebView newWebView = new WebView(MainActivity.this);
                WebSettings webSettings = newWebView.getSettings();
                webSettings.setJavaScriptEnabled(true);
                newWebView.setVisibility(View.GONE);
                final Dialog dialog = new Dialog(MainActivity.this);
                dialog.setContentView(newWebView);

                ViewGroup.LayoutParams params = dialog.getWindow().getAttributes();
                params.width = ViewGroup.LayoutParams.MATCH_PARENT;
                params.height = ViewGroup.LayoutParams.MATCH_PARENT;
                dialog.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params);
                //dialog.show();
                newWebView.setWebChromeClient(new WebChromeClient() {
                    @Override
                    public void onCloseWindow(WebView window) {
                        dialog.dismiss();
                    }
                });

                // WebView Popup에서 내용이 안보이고 빈 화면만 보여 아래 코드 추가
                newWebView.setWebViewClient(new WebViewClient() {
                    @Override
                    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                        return false;
                    }

                    @Override
                    public void onPageFinished(WebView view, String url) {
                        super.onPageFinished(view, url);
                        mWebView.loadUrl(view.getUrl());
                    }

                });

                ((WebView.WebViewTransport) resultMsg.obj).setWebView(newWebView);
                resultMsg.sendToTarget();
                //Log.d(MainURL,newWebView.getUrl());
                return true;

            }

            @SuppressLint("SetJavaScriptEnabled")
            @Override
            public void onCloseWindow(WebView window) {
                super.onCloseWindow(window);
                window.goBack();
            }


        });

And I use mWebView.loadUrl(url) to load my url.

android
video
webview
asked on Stack Overflow Nov 7, 2020 by Dayo

1 Answer

0
mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);

This line is the cause of your problem. Video playback will not work when layer type is software. So change it either to LAYER_TYPE_NONE or LAYER_TYPE_HARDWARE like:

mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE , null);

or

mWebView.setLayerType(WebView.LAYER_TYPE_NONE, null);

Quick tip: Search more on internet regarding differences between various layer types and their performance and other aspects and then only use them wisely.

answered on Stack Overflow Nov 20, 2020 by Chaitanya Karmarkar

User contributions licensed under CC BY-SA 3.0