Développement Android : Lancer un Appel Téléphonique

Ce guide explique comment créer une applciation Android de base permetant aux utilisateurs de saisir un numéro de téléphone et de lancer un appel via un simple bouton. C'est une excellente introduction aux concepts fondamentaux d'Android, y compris la conception de l'interface utilisateur, la gestion des permissions et l'interaction avec les fonctionnalités du système via les Intents.

Défiintion de l'Interface Utilisateur (activity_main.xml)

L'interface de notre application est définie dans le fichier de layout activity_main.xml. Elle comprend un TextView pour les instructions, un EditText pour la saisie du numéro de téléphone et un Button pour initier l'appel. Nous utilisons un LinearLayout pour organiser ces éléments verticalement.


<!-- Disposition linéaire pour organiser les éléments verticalement -->
<LinearLayout 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"
    android:orientation="vertical"
    android:padding="16dp" <!-- Ajoute un espacement autour du contenu -->
    tools:context="com.example.appeldemo.MainActivity">

    <!-- Texte d'instruction pour l'utilisateur -->
    <TextView
        android:id="@+id/tv_instructions"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/prompt_text" />

    <!-- Champ de saisie pour le numéro de téléphone -->
    <EditText
        android:id="@+id/et_phone_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="phone" <!-- Restreint le clavier aux numéros de téléphone -->
        android:maxLines="1" <!-- S'assure que la saisie reste sur une seule ligne -->
        android:hint="@string/enter_phone_hint"/>

    <!-- Bouton pour déclencher l'appel -->
    <Button
        android:id="@+id/btn_dial_call"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/dial_button_label" />

</LinearLayout>

Les chaînes de caractères utilisées dans le layout sont définies dans res/values/strings.xml :


<resources>
    <string name="app_name">MonAppelDemo</string>
    <string name="prompt_text">Veuillez entrer un numéro de téléphone :</string>
    <string name="enter_phone_hint">Ex: 0123456789</string>
    <string name="dial_button_label">Appeler</string>
</resources>

Déclaration des Permissions (AndroidManifest.xml)

Pour qu'une application Android puisse initier un appel téléphonique, elle doit déclarer la permission CALL_PHONE dans son fichier manifeste. Cette permission est cruciale ; sans elle, l'application échouera lors de la tentative d'appel.


<?xml version="1.0" encoding="utf-8"?>
<!--
    Le package identifie l'application de manière unique sur l'appareil.
    versionCode est pour le système, versionName pour l'utilisateur.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.appeldemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <!-- Nécessaire pour que l'application puisse initier des appels téléphoniques -->
    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Logique de l'Application (MainActivity.java)

La classe MainActivity est responsable de la gestion des interactions utilisateur. Elle récupère les références aux vues définies dans le layout, puis configure un écouteur d'événements pour le bouton. Lorsque le bouton est cliqué, elle lit le numéro de téléphone, valide la saisie et crée un Intent pour lancer l'appel.


package com.example.appeldemo;

import android.app.Activity;
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 android.widget.Toast; // Utilisé pour afficher des messages courts à l'utilisateur

public class MainActivity extends Activity {

    private Button dialButton;
    private EditText phoneNumberInput;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Associe le layout XML à cette activité
        setContentView(R.layout.activity_main);

        // Récupère les vues par leur ID
        dialButton = findViewById(R.id.btn_dial_call);
        phoneNumberInput = findViewById(R.id.et_phone_number);

        // Configure l'écouteur de clic pour le bouton d'appel
        dialButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Extrait le numéro de téléphone du champ de saisie
                String phoneNumber = phoneNumberInput.getText().toString().trim();

                // Vérifie si le numéro est vide
                if (phoneNumber.isEmpty()) {
                    Toast.makeText(MainActivity.this, "Veuillez entrer un numéro de téléphone.", Toast.LENGTH_SHORT).show();
                    return; // Arrête l'exécution si le champ est vide
                }

                // Crée un Intent pour l'action d'appel
                // Le préfixe "tel:" est nécessaire pour que l'Intent comprenne le type de données
                Intent callIntent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + phoneNumber));

                // Vérifie si une application est capable de gérer cet Intent avant de le démarrer
                if (callIntent.resolveActivity(getPackageManager()) != null) {
                    startActivity(callIntent);
                } else {
                    Toast.makeText(MainActivity.this, "Impossible de trouver une application pour gérer l'appel.", Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}

Étiquettes: Android Développement mobile Java XML AndroidManifest

Publié le 22 juin à 01h23