WebView – no puede descargar el archivo sin solicitarlo dos veces?
Si escucho con DownloadListener
, obtengo la URL que necesito solicitar después de que el navegador ya la haya solicitado . El navegador ya ha abierto una conexión a la URL (que es cómo sabe que esto es una descarga), ¿por qué no puede pasarme la conexión?
También intenté asignar un WebViewClient
personalizado al WebView
y utilizar shouldOverrideUrlLoading
para capturar URL antes de que se soliciten. Para descargar archivos de esa manera, solicito cada URL antes de que el navegador y por su Tipo de Contenido Decido si descargarlo o no, si es entonces lo descargué de la conexión ya abierta, de lo contrario cierro la conexión e instruyo la Navegador para cargarlo, y el navegador … lo solicita de nuevo. Además, en shouldOverrideUrlLoading
no se me informa qué método y qué cookies debo utilizar para solicitar la URL dada.
- Controlador de protocolo WebView de Android
- SaveState de Webview no maneja WebViewClient personalizado
- Android JS en WebView.loadUrl ()
- WebViewClient.onPageStarted () llamó dos veces al especificar URL no existente a través de WebView.loadURL ()
- ¿Cuál es la diferencia entre setWebViewClient y setWebChromeClient?
¿Cómo no puedo pedir dos veces innecesariamente y seguir siendo capaz de descargar archivos con WebView?
- ShouldOverrideUrlLoading (...) no se ejecuta si "window.location.href" modificado en una devolución de llamada de tiempo de espera
- Obteniendo webViewClient.shouldInterceptRequest () en android 2.x
- ShouldOverrideUrlLoading se llama SOLAMENTE para ALGUNAS páginas web
- Android: comprueba si la solicitud es GET o POST
- Android: EventHub.removeMessages (int what = 107) no es compatible antes de que se configure WebViewCore
- WebView de Android ignorando target = "_ blank" cuando se agrega WebViewClient
- WebView Crash por java.io.IOException: cerrar error: EIO (error de E / S) libcore.io.IoUtils.close (IoUtils.java:41)
- Habilitación de JavaScript general en WebViewClient
Una solución simple es modificarlo para descargarlo sin pedir al usuario la confirmación basada en el tipo de contenido, sino simplemente poner un botón de cancelar en lo que se utiliza para supervisar la descarga.
¿Por qué no utilizar la url para descargarlo usando outputstream? Aquí hay un ejemplo:
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; }
¿Está seguro de que desea interrumpir el trabajo del navegador? Utiliza multy-thread para descargar múltiples URL's y también está manejando su propio sistema de archivos para crear cookies para esa URL y él sabe cuando necesita borrarlas y actualizarlas.
¿Así que estás seguro?
- Obtener los args de Bundle en la devolución de llamada onLoadFinished CursorLoader
- Cómo construir y utilizar ffmpeg dentro de android