Pregunta:
Fecha: 28-01-2018 00:37:40
(En Español)
Tengo creada una página HTML donde tengo puestos números de teléfonos y direcciones de correo electrónicos.
telefonos.htm
He cargado una clase Fragmen en Androdi Studio para cargar la página
Telefonos.java
y en el xml tengo puesteo este código.
telefonos.xml
En el AndroidManifest.xml tengo puesto estos permisos, aunque algunos no tienen nada que ver, pero son de pruebas de otra parte de la aplicación.
Y cuando pulso un numero de teléfono o el en correo, no me muestra el teclado con el numero puesto para realizar la llamado, me muestra una página con un error.

¿Porque me muestra éste error y no el teclado del teléfono o el correo si se pulsa en el enlace del correo?
Gracias. Votos: 1 - Respuestas: 18 - Vistas: 16 Compartir en: Google Facebook Twitter LinkedIn Link
Llamar por telefono desde Android con HTML[Resuelta]
Buenos días, quería pediros ayuda para ver cómo solucionar este problema.Tengo creada una página HTML donde tengo puestos números de teléfonos y direcciones de correo electrónicos.
telefonos.htm
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <title>telefonos</title> <style> </style> </head> <body style="text-align: center"> <div class="rvps4"> <table width="567" border="1" cellpadding="2" cellspacing="2" style="border-spacing: 1.5pt; font-size: 14pt; font-family: 'Times New Roman', Times, serif; font-style: normal; font-weight: normal; color: #000000; text-decoration: none; margin: 0px auto"> <tr valign="top"> <td width="327" height="38" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #00ffff;" align="center"> <p class="rvps3"><span class="rvts7">Nombre</span></td> <td width="117" height="38" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #ccffcc;" align="center"> <p class="rvps3"><span class="rvts6">Telf.</span></td> <td width="97" height="38" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #ffff99;" align="center"> <p class="rvps3"><span class="rvts6">Correo</span></td> </tr> <tr valign="top"> <td width="327" height="33" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #ccffff;"> <p class="rvps2"><span class="rvts9">xxxxx xxxxx xxxxx </span></td> <td width="117" height="33" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #ccffcc;"> <p class="rvps3" align="center"> <a class="rvts13" title="Exterior" href="tel:999999999">999999999</a></td> <td width="97" height="33" valign="middle" style="border-style: inset; padding: 1.5pt; background-color: #ffff99;"> <p class="rvps3" align="center"> <a class="rvts8" title="e-mail" href="mailto:correo@gmanil.com"> e-mail</a></td> </tr> </table> </div> </body> </html>
He cargado una clase Fragmen en Androdi Studio para cargar la página
Telefonos.java
public class Telefonos extends Fragment {
private static final String ARG_PARAM1 = "param1";
private static final String ARG_PARAM2 = "param2";
private String mParam1;
private String mParam2;
private WebView webView;
private OnFragmentInteractionListener mListener;
public Telefonos() {
}
public static Telefonos newInstance(String param1, String param2) {
Telefonos fragment = new Telefonos();
Bundle args = new Bundle();
args.putString(ARG_PARAM1, param1);
args.putString(ARG_PARAM2, param2);
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (getArguments() != null) {
mParam1 = getArguments().getString(ARG_PARAM1);
mParam2 = getArguments().getString(ARG_PARAM2);
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.telefonos, container, false);
webView = (WebView) view.findViewById(R.id.webview);
webView.loadUrl("file:///android_asset/telefonos.htm");
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
return view;
}
public void onButtonPressed(Uri uri) {
if (mListener != null) {
mListener.onFragmentInteraction(uri);
}
}
@Override
public void onDetach() {
super.onDetach();
mListener = null;
}
public interface OnFragmentInteractionListener {
void onFragmentInteraction(Uri uri);
}
}
y en el xml tengo puesteo este código.
telefonos.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.SoCu.CirDocu.Telefonos">
<!-- TODO: Update blank fragment layout -->
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent"></WebView>
</FrameLayout>
En el AndroidManifest.xml tengo puesto estos permisos, aunque algunos no tienen nada que ver, pero son de pruebas de otra parte de la aplicación.
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
Y cuando pulso un numero de teléfono o el en correo, no me muestra el teclado con el numero puesto para realizar la llamado, me muestra una página con un error.

¿Porque me muestra éste error y no el teclado del teléfono o el correo si se pulsa en el enlace del correo?
Gracias. Votos: 1 - Respuestas: 18 - Vistas: 16 Compartir en: Google Facebook Twitter LinkedIn Link
Respuestas:
-
-
Fecha: 29-01-2018 06:38:02 Hola Jorge, puede ser la 17 ?
Ante la duda te pongo todo el codigo, por si ese dato no es correcto.
apply plugin: 'com.android.application' android { compileSdkVersion 25 buildToolsVersion '26.0.3' defaultConfig { applicationId 'com.SoCu.CirDocu' minSdkVersion 17 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } productFlavors { } } dependencies { implementation 'com.android.support:design:25.4.0' compile fileTree(include: ['*.jar'], dir: 'libs') androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) compile 'com.android.support:appcompat-v7:25.4.0' compile 'com.android.support:design:25.4.0' compile 'de.hdodenhof:circleimageview:2.1.0' compile 'com.android.support:mediarouter-v7:25.4.0' compile 'com.android.support.constraint:constraint-layout:1.0.2' testCompile 'junit:junit:4.12' compile 'com.jakewharton:butterknife:8.5.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' compile 'com.google.android.gms:play-services-maps:11.8.0' compile 'com.google.android.gms:play-services-plus:11.8.0' compile 'com.google.android.gms:play-services-auth:11.8.0' compile 'com.google.android.gms:play-services-location:11.8.0' compile 'com.google.maps.android:android-maps-utils:0.4' compile 'com.android.support:recyclerview-v7:25.4.0' compile project(':Cir Docu') }
Editado
te dejo esta captura a ver si esto es mas correcto

Un saludo. Votos: 0 - Link respuesta -
-
Fecha: 29-01-2018 08:27:12 he cambiado minSdkVersion 19, y me sigue dando el mismo error :( Votos: 0 - Link respuesta
-
Fecha: 29-01-2018 09:05:04 Te paso 2 opciones que veo por ahi...
- agregar target='_blank' a la etiqueta <a>
- cambiar el comportamiento cuando el webview carga una url:
mWebView = (WebView) findViewById(R.id.web_view); WebSettings webSettings = mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if( url.startsWith("http:") || url.startsWith("https:") ) { return false; } // Otherwise allow the OS to handle things like tel, mailto, etc. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity( intent ); return true; } }); mWebView.loadUrl(url);Votos: 1 - Link respuesta -
Fecha: 29-01-2018 11:44:32 Hola Jorge, para cambiar el comportamiento cuando el webview carga una url, donde hay que poner éste codigo ? te he puesto en el primer mensaje el codigo completo que tengo puesto en la clase Fragment.
Y en este codigo que pones:
mWebView = (WebView) findViewById(R.id.web_view);
en we_view hay que poner el nombre del archivo xml (telefono.xml)
Un saludo. Votos: 1 - Link respuesta -
Fecha: 29-01-2018 11:58:32 simplemente con colocar tus enlaces asi deberia de funcionar
layout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
activity (kotlin)
class WebviewActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_webview) val myWebView = this.findViewById<View>(R.id.webView) as WebView myWebView.loadUrl("https://hitcel.com/test.html") } }
<a href="tel:+58123456789">Click para llamar</a> <a href="mailto:info@gmail.com">Email</a>
eso basto para mi Votos: 1 - Link respuesta -
Fecha: 29-01-2018 12:05:25 Modificando tu código queda de la siguiente manera:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.telefonos, container, false); webView = (WebView) view.findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if( url.startsWith("http:") || url.startsWith("https:") ) { return false; } // Otherwise allow the OS to handle things like tel, mailto, etc. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity( intent ); return true; } }); webView.loadUrl("file:///android_asset/telefonos.htm"); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient()); return view; }Votos: 1 - Link respuesta -
Fecha: 29-01-2018 22:33:20 Hola, anoche estuve realizando pruebas y no puede responder porque se me hizo algo tarde, os respondo desde el móvil por para que veáis los resultados por si tengo que probar algo más.
Carlos la clase kotlin, no puedo ponerla, ni una clase activity tampoco, por el tipo de menú que tengo creado, las clases tienen que ser Fragmen.
Jorge he puesto el nuevo código, y me sigue dando el mismo error, incluso he cambiado la página html que tengo por el link de Carlos y pasa lo mismo.
También he probado con el target='_blank' puesto y sin él. Votos: 0 - Link respuesta -
Fecha: 30-01-2018 00:38:14 toca revisar con que dispositivo estas realizando las pruebas, te recomendaría en caso de no, hacerlas con tu dispositivo móvil,los emuladores no suelen ser adecuados para todos los test, tu móvil te dará un test real sobre tu app.
La prueba la realice en un dispositivo con android 5.1 y en otro con 4.2 basado en tu configuración,lo único distinto es que no use fragment si no un activity, además de la configuración que coloque en mi anterior mensaje y funcionó sin problemas. Votos: 1 - Link respuesta -
Fecha: 30-01-2018 02:51:34 Hola Carlos, la diferencia puede que este en la clase, yo tengo que utilizar Fragment, y las pruebas las he realizado en el emulador de Androdi Studio, y tambien desde el movil, y desde los dos sitios muestra ese mensaje de error. Votos: 0 - Link respuesta
-
Fecha: 30-01-2018 03:31:00 intenta de esta manera haciendo referencia a tu webview para forzar al dial del numero a ver
public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); }else if(url.startsWith("http:") || url.startsWith("https:")) { view.loadUrl(url); } return true; }Votos: 1 - Link respuesta -
Fecha: 30-01-2018 04:24:17 Nada Carlos me ha dado error tambien, he probrado con target='_blank' y sin el, no lo entiendo.
Votos: 0 - Link respuesta -
Fecha: 04-02-2018 03:31:50 Esta opcion abre cualquier enlace dentro del webview:
mWebView.setWebViewClient(new WebViewClient()
Deberias dejhar tu codigo solo de esta manera:
webView.loadUrl("file:///android_asset/mnk_18_5.html"); WebSettings webSettings = webView.getSettings(); webSettings.setJavaScriptEnabled(true); return view;Votos: 1 - Link respuesta -
Fecha: 04-02-2018 04:36:02 Muchas gracias Carlos, lo has solucionado, gracias a ti ahora funciona. Votos: 1 - Link respuesta
-
Fecha: 05-06-2019 14:11:33 Hola buena tarde
creo que tengo el mismo problema hice una app que es un web view pero tengo el problema de que cuando estoy en la app y oprimo en un numero telefonico me aparece un error y si abro la pag web en chrome y oprimo en el telefono y abre la app de telefono estuve leyendo la cadena de mensajes y vi que lograron resolver el tema quisiera saber si podria usar ese mismo codigo en mi app pero como soy autodidacta no se donde colocar ese codigo me podrian ayudar con ese problema? Votos: 0 - Link respuesta -
Fecha: 25-06-2019 07:33:48 Así es NO hay una solución, el web view no abre enlaces tipo tel: 0000... envía el error, quien tiene esa validación.
el Web View abre el sitio pero los numeros de teléfono que estan en los sitios web no los abre, ni la ubcación en google maps en resumen el web view no abre enlaces nativos si utilizamos
mWebView.setWebViewClient(new WebViewClient()
al final para que funcione tenemos que eliminar ese frangmento de codigo y dejar que nuestro Web view abra un explorador mmm que chafa :( Votos: 0 - Link respuesta -
Fecha: 25-06-2019 08:09:59 Prueben con esta solución, yo la use hace tiempo y me funciono también:
https://stackoverflow.com/a/4339193
public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url.startsWith("tel:")) { Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(intent); view.reload(); return true; } view.loadUrl(url); return true; }Votos: 0 - Link respuesta
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
