下载侦听器应该如何工作?可能我错过了什么。我做了以下工作:
在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);
    }
}

10-07 19:49
查看更多