Android webview 不显示视频
Android webview don`t display video
androidwebview是否可以显示带有video标签的mp4视频?
在我的应用程序中,我的 webview 需要以 .但是,我的 webview 只显示黑屏(音频工作正常)。
我在 Android API 29 级工作。
这是我关于 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();
}
});
然后我使用 mWebView.loadUrl(url) 加载我的 url.
mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
这一行是导致您出现问题的原因。当层类型为软件时,视频播放将不起作用。因此,将其更改为 LAYER_TYPE_NONE 或 LAYER_TYPE_HARDWARE,例如:
mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE , null);
或
mWebView.setLayerType(WebView.LAYER_TYPE_NONE, null);
快速提示:在 Internet 上搜索更多关于各种图层类型之间的差异及其性能和其他方面的信息,然后明智地使用它们。
androidwebview是否可以显示带有video标签的mp4视频?
在我的应用程序中,我的 webview 需要以 .但是,我的 webview 只显示黑屏(音频工作正常)。
我在 Android API 29 级工作。
这是我关于 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();
}
});
然后我使用 mWebView.loadUrl(url) 加载我的 url.
mWebView.setLayerType(WebView.LAYER_TYPE_SOFTWARE, null);
这一行是导致您出现问题的原因。当层类型为软件时,视频播放将不起作用。因此,将其更改为 LAYER_TYPE_NONE 或 LAYER_TYPE_HARDWARE,例如:
mWebView.setLayerType(WebView.LAYER_TYPE_HARDWARE , null);
或
mWebView.setLayerType(WebView.LAYER_TYPE_NONE, null);
快速提示:在 Internet 上搜索更多关于各种图层类型之间的差异及其性能和其他方面的信息,然后明智地使用它们。