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.

¿Cómo no puedo pedir dos veces innecesariamente y seguir siendo capaz de descargar archivos con WebView?

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?

  • ¿Qué hace stopLoading () realmente hacer?
  • ¿Qué se considera onPageFinished en el WebViewClient para Android?
  • WebView loadUrl sólo funciona una vez
  • Android WebViewClient onReceivedError no se llama para un error 404
  • ShouldOverrideUrlLoading no funciona / captura los clics del enlace mientras la página se está cargando
  • ¿WebViewClient y WebChromeClient se excluyen mutuamente?
  • Vista web de Android lanza navegador cuando llama a loadurl
  • Android WebView para Facebook como botón
  • El controlador onScaleChanged de WebView se llama varias veces
  • URL de Soundcloud abierta en la aplicación nativa Soundcloud de WebView
  • Interceptar y anular las solicitudes HTTP de WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.