¿Por qué WebView no puede abrir algunas URL locales (Android)?

Tengo un WebView que estoy utilizando para abrir algunos archivos almacenados en el directorio assets/ de mi proyecto. Funciona bien para la mayoría de los archivos, pero hay uno en particular (y estoy seguro de que otros no he encontrado) que simplemente no se abrirá.

El archivo con el que tengo problemas se denomina:

 "assets/ContentRoot/Photos/XXX Software Logo - jpg - 75%.JPG" 

Cuando lo paso a WebView , y muestra la página de error, se muestra como:

 "file:///android_asset/ContentRoot/Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" 

Entonces intenté funcionar con URLEncoder.encode() en él y conseguí la página del error con la URL presentada como:

 "file:///android_asset/ContentRoot/Photos/XXX+Software+Logo+-+jpg+-+75%.JPG" 

Ninguna de estas URLs fueron capaces de abrir el archivo (y ambos se ven bien para mí). ¿Alguien tiene alguna idea?

ACTUALIZACIÓN: Si codifico el % a mano (usando %25 , como se sugiere commonsware.com) entonces carga la imagen, pero intenta analizarla como texto, no como una imagen, así que solo obtengo un montón de (básicamente) basura.

Alojado por imgur.com

Además, referirse a la imagen en un documento HTML con una URL relativa no funciona (probablemente porque no se está analizando como una imagen?):

 <img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%.JPG" /> <img src="../Photos/XXX%20Software%20Logo%20-%20jpg%20-%2075%25.JPG" /> 

Bueno, después de pasar demasiado tiempo en esto, he descubierto lo que está pasando. Básicamente, si las imágenes almacenadas en el directorio assets/ contienen un espacio (por ejemplo, "") en su nombre de archivo, no se procesarán como imágenes.

 myWebView.loadUrl("file:///android_asset/testimage.jpg"); 

funciona bien. Sin embargo,

 myWebView.loadUrl("file:///android_asset/test+image.jpg"); 

Sólo lanza un error no encontrado y

 myWebView.loadUrl("file:///android_asset/test image.jpg"); // and myWebView.loadUrl("file:///android_asset/test%20image.jpg"); 

Mostrarlo incorrectamente visualizado (como texto … ver captura de pantalla en cuestión).

Este comportamiento inesperado está presente en (al menos) 1.5, 1.6 y 2.0 y presenté un informe de error .

Intente deshacerse del % en el nombre de archivo. O escápela como %25 .

Supongo que WebView sólo entiende los tipos de contenido relacionados con el texto por lo que fielmente el tratamiento de su JPG como base64 de codificación, decodifica y muestra el resultado gobble-goop como texto. Realmente no sé si es posible establecer el tipo de contenido para WebView, pero como solución se puede intentar tirar img etiqueta dentro de la etiqueta html y carga página resulttet. También probablemente sólo puede usar WebView # loadDataWithBaseUrl

  • ¿Qué significa "enable DOM storage API"?
  • El contenido favorito no se muestra correctamente en la vista web
  • Cómo configurar el zoom / ancho inicial para una vista web
  • Reemplazo de Android Mapview para utilizar un servicio WMS
  • Cómo detener ScrollView desde el desplazamiento hasta la parte inferior de la página cargada actual en WebView
  • ¿Tiene el nuevo Android WebView el mismo rendimiento que CrossWalk WebView?
  • Android WebView - Los vídeos de Youtube que no se reproducen dentro de la aplicación
  • Pantalla Splash mientras carga una url en una vista web en la aplicación Android
  • Redirigir la vista web de Android con el filtro de intenciones
  • Añadir indicador de carga / barra de progreso a Phonegap Pantalla de bienvenida de Android
  • ShouldOverrideUrlLoading en custom Cordova CordovaWebViewClient no funciona más
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.