我正在拼凑一个cheapo应用程序,该应用程序除其他外可以“构架”我们的某些网站…使用,非常简单WebViewClient。直到我看了视频。
WebViewClient
视频是作为HTML5 元素完成的,在Chrome,iPhone上它们可以正常工作,而且现在我们已解决了编码问题,Android在本机浏览器中效果很好。
HTML5
Android
现在的问题是:WebView不喜欢它。完全没有 我可以单击海报图像,但没有任何反应。
WebView
谷歌搜索,我发现这很接近,但似乎是基于“链接”(如href…),而不是视频元素。(onDownloadListener似乎未在视频元素上被调用…)
我还看到了有关重写onShowCustomView的引用,但是似乎没有在视频元素上调用……shouldOverrideUrlLoading也没有。
我宁愿不要进入“从服务器中提取xml,在应用程序中重新格式化它”..通过保持服务器上的故事布局,我可以更好地控制内容,而不必强迫人们不断更新应用程序。因此,如果我可以说服WebView处理本机浏览器之类的标签,那将是最好的。
我显然缺少明显的东西。但是我不知道是什么。
我回答这个主题,以防万一有人阅读它并对结果感兴趣。可以在WebView中查看视频元素(视频html5标签),但是我必须说我不得不处理几天。到目前为止,我必须遵循以下步骤:
-查找正确编码的视频
-初始化WebView时,设置JavaScript,插入WebViewClient和WebChromeClient。
url = new String(“ http://broken-links.com/tests/video/”); mWebView =(WebView)findViewById(R.id.webview); mWebView.setWebChromeClient(chromeClient); mWebView.setWebViewClient(wvClient); mWebView.getSettings()。setJavaScriptEnabled(true); mWebView.getSettings()。setPluginState(PluginState.ON); mWebView.loadUrl(url);
-处理WebChromeClient对象中的onShowCustomView。
@Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); if (view instanceof FrameLayout){ FrameLayout frame = (FrameLayout) view; if (frame.getFocusedChild() instanceof VideoView){ VideoView video = (VideoView) frame.getFocusedChild(); frame.removeView(video); a.setContentView(video); video.setOnCompletionListener(this); video.setOnErrorListener(this); video.start(); } } }
-处理视频的onCompletion和onError事件,以返回到Web视图。
public void onCompletion(MediaPlayer mp) { Log.d(TAG, "Video completo"); a.setContentView(R.layout.main); WebView wb = (WebView) a.findViewById(R.id.webview); a.initWebView(); }
但是现在我应该说还有一个重要的问题。我只能播放一次。第二次单击视频分发器(海报或某些播放按钮)时,它什么也没做。
我也希望视频在WebView框架内播放,而不是打开Media Player窗口,但这对我来说是个次要问题。
希望对您有所帮助,也要感谢您的任何评论或建议。
Saludos,terrícolas。