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"
Publicación traducida automáticamente
Artículo escrito por AnushkaKhattri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA