在我尝试创建通过HTML5(而不是通过Flash)播放YouTube视频的WebView时,我试图在我的活动的onCreate()中逐字实现这篇文章:
WebView webView = (WebView) findViewById(R.id.embeddedWebView); webView.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimeType, long size) { Log.v("TAG", "url: " + url + ", mimeType: " + mimeType); Intent viewIntent = new Intent(Intent.ACTION_VIEW); viewIntent.setDataAndType(Uri.parse(url), mimeType); try { startActivity(viewIntent); } catch (ActivityNotFoundException ex) { Log.w("YourLogTag", "Couldn't find activity to view mimetype: " + mimeType); } } });
由于某些原因它没有被调用,因此注意到我的代码中没有任何地方指定"implements DownloadListener",我将其重新实现为一个单独的类,定义为
public class MyDownloadListener implements DownloadListener
并如上所述实现onDownloadStart()(将活动作为参数传递,以便它可以调用startActivity().然后在onCreate()中,我只是这样做:
mDownloadListener = new MyDownloadListener(this); mWebView.setDownloadListener(mDownloadListener);
我再次尝试在YouTube上,并在http://broken-links.com/tests/video/,我仍然不logcat中看到任何痕迹是onDownloadStart()是不断被调用.
如何调用它需要做什么?我错过了什么?
当WebView认为渲染引擎无法处理内容时,setDownloadListener会设置侦听器.
注册渲染引擎无法处理内容时要使用的接口,应该下载.这将取代当前的处理程序.
webview使用WebKit渲染引擎,我相信可以(或认为它可以)处理html5,以便不会调用侦听器.