Reputation: 51
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.
Upvotes: 0
Views: 948
Reputation: 1595
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.
Upvotes: 1