Pregunta

Tengo problemas al intentar descargar archivos del servidor en una aplicación basada en WebView.Este código en realidad Funciona en un Galaxy S4 con android 4.4.2 pero no funciona en un Nexus 5 con la misma versión de Android.

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        if (url.toLowerCase().contains("video") || url.toLowerCase().contains("mp4")) {
            String cookie = CookieManager.getInstance().getCookie(url);

            DownloadManager mdDownloadManager = (DownloadManager) MainActivity.this
                    .getSystemService(Context.DOWNLOAD_SERVICE);

            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));

            request.addRequestHeader("Cookie", cookie);
            request.setDescription(getString(R.string.download_video));
            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
            request.setTitle(getString(R.string.app_name));
            Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).mkdirs();

            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS,  getFileName(url));
            request.setMimeType("video/mp4");
            mdDownloadManager.enqueue(request);
        }
        webViewPreviousState = PAGE_REDIRECTED;
        view.loadUrl(appendAndroidClientIdentification(url));

        return true;
    }

Al inspeccionar los registros se encontró esto al intentar descargar un archivo a través del dispositivo Nexus 5:

 I/DownloadManager﹕ Download 1755 starting
 W/DownloadManager﹕ Aborting request for download 1755: can't know size of download, giving up
 I/DownloadManager﹕ Download 1755 finished with status CANNOT_RESUME

Respuesta:

El problema estaba en el lado del servidor.Estaba usando el método send_data de Rails.Este método no envía ContentLength en los encabezados y este es el motivo del error en algunos dispositivos.

Para solucionar este problema simplemente agregue al aplicación.rb archivo :

config.middleware.use Rack::ContentLength
¿Fue útil?

Solución

El problema estaba en el lado del servidor.Estaba usando el método send_data de rieles.Este método no envía el ContentLength en los encabezados y esta es la razón del error en algunos dispositivos.

Para solucionar este problema simplemente agregue al application.rb :

config.middleware.use Rack::ContentLength
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top