Загрузить файл из веб-просмотра в пользовательскую папку

Можно ли загрузить файл в пользовательский каталог из веб-браузера Android. В настоящее время файл загружается в SDCard/downloads. Можно ли переопределить местоположение загрузки по умолчанию?

В настоящее время я использую следующий код для загрузки файла

Intent intent = new Intent(Intent.ACTION_VIEW Uri.parse("download file location"));
startActivity(intent); 

1 ответ

Когда вы имеете в виду, что вам нужен браузер... вы имеете в виду, что вам нужно обрабатывать загрузку с помощью браузера? Потому что вы можете использовать веб-просмотр и по-прежнему обрабатывать загрузку самостоятельно.

Как прокомментировал @Harry Joy, я бы использовал shouldOverrideUrlLoading(WebView view, String url) метод и отфильтруйте те URL / расширения, которые вы хотите загрузить отдельно. Если у вас нет конкретных расширений или URL-адресов, которые вы, возможно, захотите загрузить, но вы можете отредактировать html/javascript-код, возможно, вы можете сделать какой-нибудь трюк javascript, чтобы добавить флаг и заставить ваш WebView распознавать URL-адрес как загрузку.

Чтобы справиться с загрузкой, может быть, вы уже знаете, но это было бы что-то вроде этого

    if (sUserAgent == null) {
        Log.e(TAG + " - Conexion", getString(R.string.e_envio_datos));
    }
    // Create client and set our specific user-agent string
    HttpClient client = new DefaultHttpClient();
    HttpPost request = new HttpPost(url);
    request.setHeader("User-Agent", sUserAgent);
    try {
        HttpResponse response = client.execute(request);
        // Check if server response is valid
        StatusLine status = response.getStatusLine();
        if (status.getStatusCode() != HTTP_STATUS_OK) {
            // Error
        } else {
            InputStream in = response.getEntity().getContent();
            byte[] read = new byte [1024];
            int numReadBytes= 0, singleByte;
            boolean endFlow= false;
            do {
                singleByte= in.read();
                endFlow = singleByte == -1;
                if (!endFlow) {
                    read[numReadBytes] = (byte) singleByte;
                    numReadBytes++;
                }
            } while (!endFlow);
            if (numReadBytes> 0) {
    // Here you implement some code to store the array of bytes as a file
                storeDataWherever(read);
            }
        }
    } catch (IOException e) {
        Log.e(TAG + " - Conexion", e.getMessage());
    } catch (ArrayIndexOutOfBoundsException e){
        Log.e(TAG + " - Conexion", getString(R.string.e_respuesta_size));       
    }
Другие вопросы по тегам