¿Cómo hago para que se abra el marcador con el número de teléfono mostrado?

193

No necesito llamar al número de teléfono, solo necesito que el marcador se abra con el número de teléfono ya mostrado. ¿Qué Intentdebo usar para lograr esto?

Nik
fuente

Respuestas:

531

Dos formas de lograrlo.

1) Necesita iniciar el marcador a través del código, sin interacción del usuario.

Es necesario Action_Dial,

use el siguiente código, abrirá Marcador con el número especificado

Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:0123456789"));
startActivity(intent); 

Se requiere el prefijo 'tel:' , de lo contrario se generará la siguiente excepción: java.lang.IllegalStateException: No se pudo ejecutar el método de la actividad.

Action_Dial no requiere ningún permiso.

Si desea iniciar la llamada directamente sin la interacción del usuario , puede usar la acción Intent.ACTION_CALL. En este caso, debe agregar el siguiente permiso en su AndroidManifest.xml:

<uses-permission android:name="android.permission.CALL_PHONE" />

2) Necesita que el usuario haga clic en la cadena Phone_Number e inicie la llamada.

android:autoLink="phone" 

Necesita usar TextView con la propiedad a continuación.

android: autoLink = "phone" android: linksClickable = "true" una propiedad textView

No necesita usar la intención ni obtener permiso de esta manera.

AAnkit
fuente
9
Eso es genial y difiere de Intent.ACTION_CALL en que no llama de inmediato
Amt87
¿ACTION_DIAL requiere el permiso o solo ACCESS_CALL?
Marc Plano-Lesay
1
Esto también funciona con números de teléfono de Dinamarca :) No es necesario agregar +45 antes del número. Funciona bien solo analizando el número de teléfono
ymerdrengene
1
Tengo un problema con el botón de retroceso después de abrir el marcador en una nueva intención. Puedo volver a mi aplicación solo presionando 3 botones de retroceso (me muestra varias pantallas de marcador que no abrí: el marcador en sí, crear una nueva pantalla de contacto, favoritos). ¿Alguien sabe cómo volver a la aplicación con solo 1 botón de retroceso?
kashlo
2
2012 ... buenos viejos tiempos. Es políticamente correcto el 2018, las grandes compañías venden datos de usuarios y nuestras aplicaciones necesitan lidiar con la burocracia de Android solo para NO admitir SMS y llamadas telefónicas.
Josh
52

Bastante tarde en la respuesta, pero si tiene un TextViewmensaje en el que muestra el número de teléfono, entonces no necesita tratar con android:autoLink="phone"ningún ACTION_DIALintento , simplemente puede usar el atributo XML y el sistema operativo iniciará automáticamente un intento.

ashishduh
fuente
Enfoque muy rápido!
Taslim Oseni
7

Bien, va a ser extremadamente tarde la respuesta a esta pregunta. Pero aquí hay solo una muestra si quieres hacerlo en Kotlin .

val intent = Intent(Intent.ACTION_DIAL)
intent.data = Uri.parse("tel:<number>")
startActivity(intent)

Pensé que podría ayudar a alguien.

gprathour
fuente
2

Como @ashishduh mencionó anteriormente, usando android:autoLink="phone también es una buena solución. Pero esta opción viene con un inconveniente, no funciona con todas las longitudes de números de teléfono. Por ejemplo, un número de teléfono de 11 números no funcionará con esta opción. La solución es prefijar sus números de teléfono con el código del país.

Ejemplo:

08034448845 no funcionará

pero lo +2348034448845hará

Ojonugwa Jude Ochalifu
fuente
1
<TextView
 android:id="@+id/phoneNumber"
 android:autoLink="phone"
 android:linksClickable="true"
 android:text="+91 22 2222 2222"
 />

Así es como puede abrir el número asignado a la etiqueta EditText directamente en el marcador.

saurabh yadav
fuente
1

Agregar permiso en manifiesto:

<uses-permission android:name="android.permission.CALL_PHONE" />

Haga un botón o cualquier ejemplo de widget: btnCall

btnCall.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent callIntent = new Intent(Intent.ACTION_DIAL);
        callIntent.setData(Uri.parse("tel: +98990*******");
        startActivity(callIntent);

    }
});
Pouria Hemati
fuente
esta respuesta es correcta pero esta respuesta no coincide con la pregunta.
Luna