Как сделать телефонный звонок из приложения Android?

Опубликовано: 10 Января, 2023

В этой статье вы создадите базовое приложение для Android , которое можно использовать для вызова некоторых номеров через ваше приложение для Android. Вы можете сделать это с помощью Intent с действием ACTION_CALL . По сути, намерение — это простой объект сообщения, который используется для связи между компонентами Android, такими как действия, поставщики контента, приемники вещания и службы, которые здесь используются для телефонных звонков. Это приложение в основном содержит одно действие с текстом редактирования для записи номера телефона, на который вы хотите позвонить, и кнопку для вызова этого номера.

Пошаговая реализация

Шаг 1. Создайте новый проект в Android Studio.

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать/запустить новый проект в Android Studio». Код для этого был предоставлен как на Java, так и на языке программирования Kotlin для Android.

Шаг 2. Добавьте разрешение в файл AndroidManifest.xml

Вам нужно получить разрешение от пользователя на телефонный звонок, и для этого разрешения CALL_PHONE добавляется в файл манифеста. Вот код файла манифеста:

<!-- Permission for phone call -->
<uses-permission android:name="android.permission.CALL_PHONE" />

Шаг 3: Работа с файлами XML

Далее перейдите к файлу activity_main.xml , представляющему UI проекта. Ниже приведен код файла activity_main.xml . Комментарии добавляются внутри кода, чтобы понять код более подробно. Этот файл содержит относительный макет, который содержит EditText для записи номера телефона, на который вы хотите сделать телефонный звонок, и кнопку для начала намерения или совершения звонков:

XML




<?xml version="1.0" encoding="utf-8"?>
<!--Relative Layout-->
<RelativeLayout 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=".MainActivity">
  
    <!-- Edit text for phone number -->
    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="30dp" />
      
    <!-- Button to make call -->
    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="115dp"
        android:padding="5dp"
        android:text="Make Call!!" />
</RelativeLayout>

Шаг 4: Работа с файлом MainActivity

Перейдите в файл MainActivity и обратитесь к следующему коду. Ниже приведен код файла MainActivity. Комментарии добавляются внутри кода, чтобы понять код более подробно. В намерении MainActivity объект создается для перенаправления активности диспетчеру вызовов, а атрибут действия намерения устанавливается как ACTION_CALL. Номер телефона, введенный пользователем, анализируется через Uri и передается как данные в объект Intent, который затем используется для вызова этого номера телефона. setOnClickListener прикрепляется к кнопке с объектом намерения в нем, чтобы сделать намерение с действием как ACTION_CALL, чтобы сделать телефонный звонок. Вот полный код:

Java




import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;
import androidx.appcompat.app.AppCompatActivity;
  
public class MainActivity extends AppCompatActivity {
  
    // define objects for edit text and button
    EditText edittext;
    Button button;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // Getting instance of edittext and button
        button = findViewById(R.id.button);
        edittext = findViewById(R.id.editText);
  
        // Attach set on click listener to the button for initiating intent
        button.setOnClickListener(arg -> {
            // getting phone number from edit text and changing it to String
            String phone_number = edittext.getText().toString();
  
            // Getting instance of Intent with action as ACTION_CALL
            Intent phone_intent = new Intent(Intent.ACTION_CALL);
  
            // Set data of Intent through Uri by parsing phone number
            phone_intent.setData(Uri.parse("tel:" + phone_number));
  
            // start Intent
            startActivity(phone_intent);
        });
    }
}

Kotlin




import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import androidx.appcompat.app.AppCompatActivity
  
class MainActivity : AppCompatActivity() {
      
    // define objects for edit text and button
    private lateinit var edittext: EditText
    private lateinit var button: Button
  
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
  
        // Getting instance of edittext and button
        button = findViewById(R.id.button)
        edittext = findViewById(R.id.editText)
  
        // Attach set on click listener to the button for initiating intent
        button.setOnClickListener(View.OnClickListener {
            // getting phone number from edit text and changing it to String
            val phone_number = edittext.text.toString()
  
            // Getting instance of Intent with action as ACTION_CALL
            val phone_intent = Intent(Intent.ACTION_CALL)
  
            // Set data of Intent through Uri by parsing phone number
            phone_intent.data = Uri.parse("tel:$phone_number")
  
            // start Intent
            startActivity(phone_intent)
        })
    }
}

Выход: