tags:

views:

31

answers:

1

How is the DownloadListener supposed to work? Probably I miss something. I did the following:

  • Register a DownloadListener at a WebView.
  • Open a WebView with a HTML page, containing a link (works).
  • If I click on the link, the DownloadListener is not called.

Here is a short portion of the code.

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);
    }
}

The logging works (I am using this everywhere to check my program), but nothing is logged, so the callback is not called. What happens is: The view tries to download the file, and fails, since zip files are not supported on my Android.

The link goes to a zip-file. It is a usual

<a href=...>...</a>

link.

I tried to figure out the alternative method of registering an intent for zip files. But the documentation is so sparse, I could not do that. If I have to, is there an example?

Any ideas?

Thanks, R.

A: 

It seems the DownloadListener is indeed not working. However, one can use the following trick:

package rene.android.learnit;

    import android.app.*;
    import android.os.Bundle;
    import android.webkit.*;

    public class ShowWeb extends Activity 
    {
        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.setWebViewClient(new WebViewClient()
            {
                public void onLoadResource (WebView view, String url) 
                {
                    Main.log(url);
                    if (url.endsWith(".zip"))
                    {
                        finish();
                    }
                    else super.onLoadResource(view,url);
                }           
            }
            );
            WV.loadUrl("http://android.rene-grothmann.de/courses.html");

        }
    }

This will allow to handle all zip files.

Rene