Abrir el archivo adjunto en WebView

Tengo un archivo adjunto en WebView . Cuando toco en ella, no pasa nada. Yo sé cómo abrir el archivo adjunto en WebView, pero la solución está basada en la condición. ¿Hay alguna solución para abrirlo sin colocar condición porque hay número de extensiones adjunto es compatible con mi aplicación. No quiero que se descargue el archivo adjunto.
Esto es lo que estoy haciendo ahora y estas son sólo algunas de las extensiones:

 if ((url.contains(".pdf") || url.contains(".xml") || url.contains(".xlsx") || url.contains(".docx") || url.contains(".ppt"))) { url = org.apache.commons.lang3.StringUtils.join("http://docs.google.com/gview?embedded=true&url=", url); browser.loadUrl(url); } 

Lo que quieres es sólo parcial posible, y siempre necesitaría manejar excepciones. En la vista Web de Android, puede hacer lo siguiente con respecto al manejo de un enlace:

1: Configurando un webviewclient para interceptar cualquier url pulsada:

La configuración del cliente web le permite comprobar qué URL se hace clic y especificar una acción para cada url diferente.

 webview.setWebViewClient(new WebViewClient() { public boolean shouldOverrideUrlLoading(WebView view, String url){ // you can try to open the url, you can also handle special urls here view.loadUrl(url); return false; // do not handle by default action } }); 

Puedes hacer esto tan difícil como quieras, para manejar tipos de archivos muy específicos que realmente necesitan ser descargados primero, pero para descargarlos en segundo plano sin cargar el navegador externo puedes hacer algo como esto:

 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // handle different requests for different type of files // Download url when it is a music file if (url.endsWith(".mp3")) { Uri source = Uri.parse(url); DownloadManager.Request mp3req = new DownloadManager.Request(source); // appears the same in Notification bar while downloading mp3req.setDescription("Downloading mp3.."); mp3req.setTitle("song.mp3"); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { mp3req.allowScanningByMediaScanner(); mp3req.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); } mp3req.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "song.mp3"); DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); manager.enqueue(mp3req); } else if(url.endsWith(".something")) { // do something else } //or just load the url in the web view else view.loadUrl(url); return true; } 

2: Interceptar cualquier archivo descargado:

También puede interceptar cuando se inicia una descarga utilizando este código. De esta forma, puede utilizar directamente el contenido descargado en su aplicación.

 mWebView.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { //do whatever you like with the file just being downloaded } }); 

Sin garantías, el manejo de excepciones es siempre necesario

Los tipos de contenido que pueden ser manejados por el WebView, dependen de la versión de WebView que se esté utilizando, en el momento actual, el WebView puede manejar sólo ciertos tipos. Para algunos tipos se necesitan permisos especiales o hardware acceleration para el vídeo html5 por ejemplo. Otro ejemplo de soporte: SVG no era compatible con Android 3.0. Y hay muchos otros muchos ejemplos donde el soporte para ciertos tipos se han implementado en las versiones recientes de WebView pero no existen para versiones anteriores.

Puede leer más sobre la implementación de WebView actual aquí: https://developer.chrome.com/multidevice/webview/overview

No hay tal cosa como un almuerzo gratis

  • Captura la imagen desde WebView
  • Webview no puede cargar https url en android?
  • Prevenir las recargas de WebView en FragmentPagerAdapter?
  • ¿Cómo hacer independientemente desplazamiento de filas y columnas (a la aplicación Netflix) en Android en un WebView?
  • Conflicto de la información de ubicación GPS en las aplicaciones de Android
  • Android WebView no carga una URL HTTPS
  • Android WebView use setWideViewPort, deshabilitar doble toque zoom pero mantener pellizcar zoom?
  • Verificar manualmente el certificado SSL en WebView
  • ¿Cómo mostraría una vista como una superposición de otra?
  • Android: la vista web se corta
  • ¿Cómo manejar los idiomas RTL en las versiones anteriores a la versión 4.2 de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.