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); }
- Android: el método de WebView goBack () muestra una página en blanco
- ¿Hay alguna forma de detectar errores en la consola Web?
- Añadir encabezados personalizados a las solicitudes de recursos de WebView - android
- Cómo cargar cadena html en una vista web?
- Al seleccionar una imagen, la aplicación se reinicia en S3
- La selección de WebView hace que el teclado virtual se oculte temporalmente y luego regrese
- Las imágenes no se cargan en la vista web de android
- WebView.addJavascriptInterface no debe ser llamado
- Android Load Cache Only no funciona. Mostrar WebView fuera de línea
- Utilizar folleto en una aplicación de Android para mostrar el mapa en línea
- Una gran cantidad de NPE de DeviceMotionService suceder recientemente
- La lista desplegable en la aplicación híbrida tiene texto negro sobre fondo gris en ciertos dispositivos Android
- Mostrar tabla HTML en la vista web
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