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();
}
}
});
}
}