He aquí un truco rápido agnóstico al dispositivo para interceptar un enlace dentro de la vista web de Android.
He estado trabajando con vistas web a petición de un cliente. Para un desarrollador de aplicaciones nativo, las vistas web pueden ser particularmente desafiantes. Uno de los desafíos que vencí recientemente fue la inclusión de un número de teléfono en el que se puede hacer clic en la vista web.
La petición del cliente fue más que razonable. La página web mostrará un número de teléfono. Cuando el usuario hacía clic en el número de teléfono, la aplicación lanzaba el marcador pre-poblado con el número de teléfono desde el sitio web.
Según todo lo que he leído, esto debería «funcionar» en un navegador móvil. Siempre y cuando el href de su enlace esté preparado con «tel:», el dispositivo que ejecuta el navegador móvil debe hacer lo correcto para la plataforma. En realidad, me di cuenta de que, aunque un buen número de dispositivos de varios fabricantes funcionaban como se anunciaba, un buen número no lo hacía. Afortunadamente, el SDK de Android tiene un mecanismo en funcionamiento desde la versión 1.0 que permite a la aplicación interceptar una URL de carga y anular el comportamiento según sea necesario.
Este tutorial demuestra cómo interceptar al usuario tocando el enlace del número de teléfono en una vista web y el subsiguiente lanzamiento de la aplicación de marcación automática. La idea es que puedes usar esta técnica independientemente de cómo el navegador móvil del dispositivo interprete (o no) el href. Siéntase libre de seguir o descargar e importar todo el proyecto directamente a Eclipse.
1. Cree un nuevo proyecto Android en Eclipse. Objetivo Android 2.3 (pan de jengibre) o superior.
2. En la carpeta /res/layout, añada una vista web a activity_main.xml.
activity_main.xml<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:layout_width="match_parent" android:layout_height="match_parent" android:match_parent:android:id="@+id/webview" /></RelativeLayout>
3. Cree un nuevo cliente de vista web dentro del archivo /src/MainAcitvity.java y asígnelo a nuestra vista web en el momento de crearlo. El resto es un intento estándar de Android para abrir el marcador y pasarle el número de teléfono incrustado dentro de la URL.
MainActivity.javapackage com.authorwjf.webview_link_intercept;import android.net.Uri;import android.os.Bundle;import android.webkit.webkit.WebView;import android.webkit.WebViewClient;import android.app.Activity;import android.content.Intent;public class MainActivity extiende Activity { private static final String HTML ="<!DOCTYPE html><html><body><a href='tel:867-5309'>Haga clic aquí para llamar!</a><</body></html>"; cadena privada estática final TEL_PREFIX = "tel:"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView wv = (WebView) findViewById(R.id.webview); wv.setWebViewClient(new CustomWebViewClient()); wv.loadData(HTML, "text/html", "utf-8"); } clase privada CustomWebViewClient extiende WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView wv, String url) { if(url.startsWith(TEL_PREFIX)) { Intención intención = nueva intención(Intención.ACTION_DIAL); intención.setData(Uri.parse(url)); startActivity(intención); return true; } return false; } } }
Usted probablemente notó que, mientras que en este caso estamos lanzando el automarcador, al devolver true en la función de carga de URLs, podemos redirigir el flujo de la aplicación de la manera que deseemos. Creo que esta técnica agnóstica a los dispositivos me resultará útil en varios escenarios además del que aquí se describe.
Si desea ver la vista web en acción, simplemente compile y cargue el APK en un dispositivo o emulador.