Webview no cargará archivos pdf en enlace haga clic
He desarrollado una aplicación web que muestra una lista de documentos pdf alojados en un servidor web. Esta aplicación está incrustada en una aplicación webview para Android, sin embargo, cuando carga la aplicación en mi teléfono, la selección de un enlace pdf no hace nada. ¿Qué estoy haciendo mal? Gracias
Aquí está el código java:
- Renderizar un archivo PDF utilizando Java en Android
- ¿Cómo abrir un pdf almacenado en res / raw o carpeta de activos?
- Pdf visor de la biblioteca con curl de página en android
- Android: dibujo a un lienzo PDF desde WebView
- Lectura de PDF desde la carpeta de activos usando PDFViewer.jar
package com.hellowebview; import android.app.Activity; import android.os.Bundle; import android.view.KeyEvent; import android.webkit.WebView; import android.webkit.WebViewClient; public class HellowebviewActivity extends Activity { /** Called when the activity is first created. */ private WebView mWebView; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.loadUrl("http://aipnz.webs.com"); mWebView.setWebViewClient(new HelloWebViewClient()); mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); } private class HelloWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView webview, String url) { webview.loadUrl(url); return true; } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) { mWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); } }
- Detectar de forma fiable la compatibilidad con PDF en un dispositivo Android
- ¿Cómo puedo leer libros PDF con la animación de curl de página en android?
- Cómo crear archivos pdf en android
- Cómo convertir jpg a pdf en Android java
- Invocación de Adobe Reader desde mi aplicación de Android
- Mostrar archivo PDF en Android WebView utilizando mozilla pdf.js Nivel de API Android inferior a 19
- Cómo obtener la actividad de vista Web para desaparecer con PDF Link Action_view
- ¿Existen bibliotecas de análisis de PDF gratuitas que funcionen en Android?
Si quieres cargar pdf, puedes usar documentos de Google para cargarlo.
String googleDocs = "https://docs.google.com/viewer?url="; String pdf_url = "http://kronox.org/documentacion/Hello.Android.new.pdf"; webView.loadUrl(googleDocs + pdf_url);
NOTA: Necesita android.permission.INTERNET en el archivo de manifiesto
Basta con crear una intención en el método shouldOverrideUrlLoading:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if ( urlIsPDF(url)){ Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "application/pdf"); try{ view.getContext().startActivity(intent); } catch (ActivityNotFoundException e) { //user does not have a pdf viewer installed } } else { webview.loadUrl(url); } return true; }
Y luego, cada vez que un usuario hace clic en un vínculo PDF en una página de su vista web, el archivo se abrirá en una aplicación PDF externa.
Esta es la solución que uso:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.endsWith(".pdf")){ String pdfUrl = googleDocs + url; view.loadUrl(pdfUrl); } else { view.loadUrl(url); } return true; }
con
private final String googleDocs = "https://docs.google.com/viewer?url=";
Utilizar loadurl otros métodos sobrecargados … y escribir permiso de internet
Debe anular el método shouldOverrideUrlLoading en WebClient. Utilizo este enfoque con la combinación de intención y Google Docs como copia de seguridad:
/* You might want to move this string definition somewhere else */ final String googleDocs = "https://docs.google.com/viewer?url="; WebView webView = new WebView(getContext()); //webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView webView, String url) { if (url.endsWith(".pdf")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "application/pdf"); /* Check if there is any application capable to process PDF file. */ if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { /* If not, show PDF in Google Docs instead. */ view.loadUrl(googleDocs + url); } } else { webView.loadUrl(url); } return true; } });
Es posible que necesite cambiar el paso del contexto y acceder startActivity
método startActivity
, pero aparte de eso, debería ejecutarse tal como está.
También tenga en cuenta que desde la API 24, hay 2 métodos shouldOverrideUrlLoading
que puede anular. Como se indica aquí desde @ CommonsWare, está bien para reemplazar el método obsoleto.
- Diferentes diseños de hijos para diferentes grupos ExpandableListView
- No se puede ejecutar la aplicación de Android en el emulador / dispositivo – la actividad no existe?