9

でリッスンすると、ブラウザが要求した後DownloadListenerに要求する必要がある URL を取得します。ブラウザーは既に URL への接続を開いています (これにより、これがダウンロードであることを認識します)。なぜ接続を渡せないのでしょうか?

WebViewClientまた、カスタムをに割り当てて、URL が要求される前にキャッチWebViewするために使用しようとしました。shouldOverrideUrlLoadingそのようにファイルをダウンロードするには、ブラウザの前にすべての URL を要求し、その Content-Type によって、ダウンロードするかどうかを決定します。ダウンロードする場合は、既に開いている接続からダウンロードします。そうでない場合は、接続を閉じて、ブラウザがそれをロードし、ブラウザが... 再度リクエストします。さらに、指定さshouldOverrideUrlLoadingれた URL を要求するためにどのメソッドとどの Cookie を使用すればよいかはわかりません。

必要に 2 回リクエストすることを避け、WebView でファイルをダウンロードできるようにするにはどうすればよいですか?

4

3 に答える 3

1

簡単な解決策は、コンテンツタイプに基づいてユーザーに確認を求めずにダウンロードするように変更することですが、代わりに、ダウンロードの監視に使用されるものにキャンセルボタンを配置するだけです。

于 2012-09-14T20:49:03.853 に答える
1

URLを使用して、outputstreamを使用してダウンロードしないのはなぜですか? 以下に例を示します。

private class DownloadFile extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... sUrl) {
    try {
        URL url = new URL(sUrl[0]);
        URLConnection connection = url.openConnection();
        connection.connect();

        // download the file
        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new FileOutputStream("/sdcard/file_name.extension");

        byte data[] = new byte[1024];
        long total = 0;
        int count;
        while ((count = input.read(data)) != -1) {
            total += count;
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();
    } catch (Exception e) {
    }
    return null;
}
于 2012-09-14T22:18:37.550 に答える
0

ブラウザの動作を中断してもよろしいですか?マルチスレッドを使用して複数のURLをダウンロードします。また、彼は自分のファイルシステムを管理して、そのURLのCookieを作成し、いつ削除して更新する必要があるかを知っています。

よろしいですか?

于 2012-09-14T11:46:18.277 に答える