2011-02-01 3 views
1

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

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

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

тот же вопрос: http://stackoverflow.com/questions/4069593/android-webview-with-custom- download-folder, но без ответа. –

+0

Кто-нибудь с ответом? –

+4

В качестве взлома/решения: не используйте браузер для загрузки. Управляйте загрузкой самостоятельно, , и вы можете хранить ее там, где можете писать. Если вы используете браузер для загрузки, он загрузится там, где хочет браузер , а не туда, куда вы хотите. –

ответ

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

Я хочу загрузить DRM-контент, когда я сохраняю файл с помощью HTTPClient, Android не может понять, что это файл DRM, поэтому происходит прямая блокировка. Android способен понять содержимое DRM только при загрузке через браузер, но там я не могу сохранить файл в нужном каталоге. Любое решение? Спасибо –

+0

Я не уверен, что Intent.ACTION_VIEW с локальным URL-адресом будет работать из-за проблемы с безопасностью. Но для загрузки данных (байт) в пользовательское местоположение вам не нужен Android, чтобы понять этот тип файла. – mdelolmo

+0

Если пользователю приходилось регистрироваться через WebView, будет ли этот код поддерживать аутентификацию при извлечении файла или это будет работать только для незащищенных файлов? – BigOmega

Смежные вопросы