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); }
- ¿Qué es el evento recomendado para actualizar la interfaz de usuario de navegación WebView?
- ¿Cuáles son los valores de retorno válidos para una interfaz Javascript en un WebView de Android?
- Rellenar campos en la vista web de forma automática
- Android 2.3 webview loadData sólo muestra caracteres codificados
- ¿Cómo mostrar el mapa google nativo en la vista web en android?
- UiAutomator getLastTraversedText ()
- Android reproducir video de youtube en la vista web
- Recarga de WebView cuando Fragmento en ViewPager se retiene desde BackStack
- Cambiar HTML en un WebView mediante programación
- OnPageFinished está disparando antes de cargar la página
- Android: Html Anchor Link funciona sólo una vez en la vista web
- Android dialogFragment "a veces" no muestra la vista web
- JQuery no funciona en WebView
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
- AsyncTask: onPostExecute se ejecuta dos veces?
- El título de la barra de herramientas desaparece al agregar vistas