¿Cómo abrir el marcador en Android a través de Intent?

El marcador telefónico es una actividad disponible con el sistema operativo Android para llamar a un número. Por lo general, dicha actividad puede tener o no un EditText, para tomar el número como entrada, y un botón de llamada. Cuando el usuario presiona el botón Llamar, invoca la actividad de la aplicación del marcador. Se recomienda el uso del prefijo ‘tel:’, de lo contrario se lanzará java.lang.IllegalStateException . Action_Dial no requiere ningún permiso. A continuación se muestra el código para el archivo MainActivity tanto en Java como en Kotlin.

Java

package com.geeksforgeeks.gfg.dial;
  
// importing packages
import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
  
public class MainActivity extends AppCompatActivity {
  
    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
  
        // Binding MainActivity.java with 
        // activity_main.xml file
        setContentView(R.layout.activity_main);
      
    }
  
    // This function is called when button is clicked.
    public  void Call(View v)
    {
        // Find the EditText by its unique ID
        EditText e = (EditText)findViewById(R.id.editText);
  
        // show() method display the toast with message 
        // "clicked"
        Toast.makeText(this, "clicked", Toast.LENGTH_LONG)
             .show();
  
        // Use format with "tel:" and phoneNumber created is 
        // stored in u.
        Uri u = Uri.parse("tel:" + e.getText().toString());
  
        // Create the intent and set the data for the 
        // intent as the phone number.
        Intent i = new Intent(Intent.ACTION_DIAL, u);
  
        try
        {
            // Launch the Phone app's dialer with a phone 
            // number to dial a call.
            startActivity(i); 
        }
        catch (SecurityException s)
        {
            // show() method display the toast with 
            // exception message.
            Toast.makeText(this, "An error occurred", Toast.LENGTH_LONG)
                 .show();
        }
    }
}

Kotlin

package com.geeksforgeeks.gfg.dial
  
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.EditText
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.example.gfgreviewinjava.R
  
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
  
        // Binding MainActivity.java with
        // activity_main.xml file
        setContentView(R.layout.activity_main)
    }
  
    // This function is called when button is clicked.
    fun Call(v: View?) {
        // Find the EditText by its unique ID
        val e = findViewById<View>(R.id.editText) as EditText
  
        // show() method display the toast with message
        // "clicked"
        Toast.makeText(this, "clicked", Toast.LENGTH_LONG)
                .show()
  
        // Use format with "tel:" and phoneNumber created is
        // stored in u.
        val u = Uri.parse("tel:" + e.text.toString())
  
        // Create the intent and set the data for the
        // intent as the phone number.
        val i = Intent(Intent.ACTION_DIAL, u)
        try {
            // Launch the Phone app's dialer with a phone
            // number to dial a call.
            startActivity(i)
        } catch (s: SecurityException) {
            // show() method display the toast with
            // exception message.
            Toast.makeText(this, "An error occurred", Toast.LENGTH_LONG)
                    .show()
        }
    }
}

Para realizar una llamada directa sin cambiar a la actividad del marcador, debe agregar Intent.ACTION_CALL en lugar de Intent.ACTION_DIAL.
actividad_principal.xml
 

XML

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
  
    <!-- covers entire width of the screen -->
    android:layout_width="match_parent"
  
    <!-- covers entire height of the screen -->
    android:layout_height="match_parent"
  
    tools:context="com.example.hp.dial.MainActivity">
  
    <EditText
        android:id="@+id/editText"
        <!-- covers as much width as required. -->
        android:layout_width="wrap_content"
  
        <!-- covers as much height as required. -->
        android:layout_height="wrap_content"
  
        <!-- left spacing from the parent layout-->
        android:layout_marginLeft="8dp"
  
        <!-- right spacing from the parent layout-->
        android:layout_marginRight="8dp"
  
        <!-- top spacing from the parent layout-->
        android:layout_marginTop="65dp"
  
        <!-- hint works as a place holder -->
        android:hint="Phone No."
  
        <!-- Expressing the given input should be phone no -->
        android:inputType="phone"
  
        app:layout_constraintHorizontal_bias="0.503"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
  
    <Button
        android:id="@+id/button"
  
        <!-- covers as much width as required. -->
        android:layout_width="wrap_content"
  
        <!-- covers as much height as required. -->
        android:layout_height="wrap_content"
  
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="67dp"
  
        <!-- name of function is Call, and it is -->
        <!-- invoked when the button is clicked.-->
        android:onClick="Call"
  
        android:text="DIAL"
  
        <!-- below are the positions of the button -->
        <!-- with respect to editText and parent layout. -->
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText"
    />
</android.support.constraint.ConstraintLayout>

En AndroidManifest.xml , incluya el siguiente permiso para llamar directamente sin abrir un marcador. Para realizar una llamada abierta en un marcador, no se necesita el permiso a continuación. 
 

uses-permission android:name="android.permission.CALL_PHONE"

Figura 1. Ingrese el número de teléfono.

Figura 2. Abra la actividad del marcador.

Publicación traducida automáticamente

Artículo escrito por AnushkaKhattri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *