下载侦听器应该如何工作?可能我错过了什么。我做了以下工作:
在WebView上注册下载侦听器。
打开包含链接(works)的html页面的webview。
如果单击该链接,则不会调用下载侦听器。
这是代码的一小部分。
package rene.android.learnit;
import android.app.*;
import android.os.Bundle;
import android.webkit.*;
public class ShowWeb extends Activity
implements DownloadListener
{
public static Lesson L;
WebView WV;
@Override
public void onCreate (Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.showweb);
WV=(WebView)findViewById(R.id.showweb);
WV.setDownloadListener(this);
WV.loadUrl("http://android.rene-grothmann.de/courses.html");
}
public void onDownloadStart (String url, String agent, String disposition,
String mimetype, long size)
{
Main.log(url+" "+mimetype+" "+size);
}
}
日志记录工作正常(我正在到处使用它来检查我的程序),但是没有记录任何内容,因此不会调用回调。结果是:视图试图下载文件,但失败了,因为我的android不支持zip文件。
链接指向一个zip文件。这是常有的事
<a href=...>...</a>
链接。
我试图找出注册zip文件意图的替代方法。但是文件太少了,我做不到。如果必须的话,有没有一个例子?
有什么想法吗?
谢谢,R.
最佳答案
它不起作用的原因是您把onDownloadStart
方法放错了位置。
为了能够加载您在WebView
中的第一个加载页面上选择的链接,您需要创建一个扩展WebViewClient
的私有类。在这个类中,您将重写shouldOverrideUrlLoading(WebView v, String url)
,否则内置浏览器将打开新的url。
此示例说明:http://developer.android.com/guide/tutorials/views/hello-webview.html
然后,在onCreate()
方法集中。为了能够在下载事件上触发,让您的webview.setWebViewClient(new WebViewClient())
(您在上面的示例中创建的)实现WebViewClient
并重写DownloadListener
方法。
例子:
private class WVClient extends WebViewClient implements DownloadListener {
@Override
public boolean shouldOverrideUrlLoading(WebView v, String u) {
v.loadUrl(u);
v.setDownloadListener(this);
return true;
}
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
Log.i(TAG, "Download: " + url);
Log.i(TAG, "Length: " + contentLength);
}
}