Vous êtes sur la page 1sur 79

Cours ANDROID

Zayneb Waari
Zaineb.waari@gmail.com
PLAN DU COURS
1 Les bases indispensables à toute
application
2Création d'interfaces graphiques
3Les Intents et Broadcast Receiver
4Vers des applications plus complexes

Exploiter les fonctionnalités d'Android


5
1
Les bases
indispensables à
toute application
INTRODUCTION
Operating System
For
Smartphones

03 01
SDK JAVA
&
XML
02
POURQUOI ANDROID ?

1 Open source 4 Facile à vendre


2 Gratuit 5 Flexible
3 Facile à développer
VERSIONS D’ ANDROID
FONCTIONNALITÉS D’
ANDROID

Stockage Réseau

Android

Localisation
Multimédia
COMPOSITION D’UNE
APP ANDROID

Activités Permissions

Services Ressources
Fournisseurs de Intent /
contenu Broadcast Receiver
AndroidManifest.xml
ANDROID ACTIVITY
android.app.Activity

* Classe JAVA qui hérite de la Classe Activity

* Vues et Contrôles
Button Spinner ListView
TextView
ImageView ProgressBar
EditText CheckBox
……..
ANDROID ACTIVITY
android.app.Activity

User
Interface
Cycle de vie d’une Activité
CYCLE DE VIE D’UNE
ACTIVITÉ
1 Démarrage : onCreate()
2 Démarrage  Ouverte : onStart()
3 Ouverte  Suspendue : onPause()
4 Suspendue  Arrêtée : onStop()
5 Suspendue  Ouverte : onResume()
6 Arrêtée  Ouverte : onRestart()
7 Arrêtée  Tuée : onDestroy()
Ma
Première
Application
Basic avec un
bouton : action
bottom

Ecran avec une


navigation en
bas

Navigation à
gauche

Pour les projet


embarqués
mainActivity.java : contient le code qui peut gérer une interface
graphique
Com.example.firstapp: contient les tests
Res: les ressources statiques : image , couleurs ,chaine de caractères …
drawable : le fichier qui contient les images (.xml se sont les images
vectorielles )
layout : fichier xml responsable du rendu graphique
Mipmap: dossier qui contient les icones de l’application , on trouve
par défaut l’icone d’android
contient des fichiers qui indique la résolution de l’image et ça dépends
du téléphone ,de la taille de l’écran …android va détecter la résolution
adéquate avec le téléphone
 values : dossier des ressources statiques comme les couleurs ,appeler
les couleurs par leurs noms et non pas par leurs
codes ,strings,xml :pour les chaines de caractères est c’est pareil
Gradle : build.gradle.kts(module:app) : c’est un gestionnaire de
build ,qui permer de créer l’application ,la configuration de l’app ,c’est-
à-dire les bibliothèques qui vont etres utilisées ,c’est un gestionnaire de
dépendances
Manifest : un fichier xml de configuration : permet de changer les
caractéristiques propres à votre application
Autoriser la
sauvegarde par
défaut

Rend
l’application
compatible
avec les
langues
Récupérer le
constructeur

Afficher le
design de
l’application
(R=ressource)
L’ajout du fichier Activity_main.xml
LES RESSOURCES
Toutes les ressources sont accessibles à travers la
classe R, dés qu'elles sont déclarées dans le fichier
XML.

R.type_ressource.nom_ressource
Strings Colors
Images Dimensions
Type Description

Dessin et Image On y trouve les images


matricielles (PNG, JPEG ou
(res/drawable) encore GIF) ainsi que des
fichiers XML qui permettent
de décrire des dessins (des
images vectorielles)

Interface Les fichiers XML qui


représentent la disposition des
Graphique vues.
(res/layout)
Différentes Elles sont nombreuses. On y
trouve entre autre des
variables variables standards, comme
des chaînes de caractères,
(res/values) des dimensions, des couleurs,
etc.
RESOURCES : STRINGS

Les chaines constantes de l'application sont situées


dans res/values/strings.xml

<resources>
<string name="hello"> Hello </string>
<string name="app_name"> This is my App </string>
</resources>
RESOURCES : COLORS

Les couleurs de l'application sont situées dans


res/values/colors.xml

<resources>
<color name="Mybleu"> #0000FF </color>
<color name="MyWhite"> #FFFFFF </color>
</resources>
RESOURCES :
DIMENSIONS
Les dimensions de l'application sont situées dans
res/values/dimens.xml

<resources>
<dimen name="horizontal_margin"> 16dp </dimen>
<dimen name="vertical_margin"> 16dp </dimen>
</resources>
2

Création d‘Interfaces
Graphiques
LAYOUT EDITOR
Un outil qui permet d'effectuer les mises en page de
manière graphique.
1 Fenêtre de Prévisualisation

2 Barre d’outils
3 Palette des éléments graphiques

4 Propriétés des éléments graphiques


LES LAYOUTS
Les conteneurs permettent de disposer un ensemble de
Widgets (ou des conteneurs fils) pour obtenir la présentation de
votre choix.
LES LAYOUTS
On trouve principalement quatre types de layouts :

1 LinearLayout

2 RelativeLayout
3 GridLayout
4 ScrollView
LES LAYOUTS
1 LinearLayout
Les conteneurs ou les widgets
appartenant à ce Layout sont alignés
en ligne soit horizontalement ou
verticalement.

 Orientation du Layout
• android:orientation=’horizontal/vertical’
LES LAYOUTS
2 RelativeLayout
Le principe du RelativeLayout est de placer les éléments selon d’autres
éléments du conteneur.

 Positionnement relatif au conteneur


• android:layout_alignParentTop (Bottom/Left/Right)
• android:layout_centerHorizontal (centerVertical)
• android:layout_centerInParent
LES LAYOUTS
2 RelativeLayout
Le principe du RelativeLayout est de placer les éléments selon d’autres
éléments du conteneur.

 Position relative aux autres éléments


• android:layout_above (below)
• android:layout_toLeftOf (toRightOf)
• android:layout_alignTop (alignBottom /alignLeft / alignRight/
alignBaseLine )
RelativeLayout
LES LAYOUTS
3 GridLayout

Le GridLayout permet de placer des éléments sur une grille, très pratique
pour des tableaux. Deux options s’avère nécessaire :
android:columnCount et android:rowCount qui correspondent au nombre
de lignes et de colonnes sur la grille.
LES LAYOUTS
4 ScrollView
c'est un placement utilisant le scroll pour gérer les débordements.

Vertical

Horizontal
LES WIDGETS
Une vue qui ne peut pas englober d'autres vues est appelée Widget

Button ListView
TextView
RadioButton
ImageView
EditText
……..
LES WIDGETS
 Attributs en commun
 layout_width : définit la largeur que prend la vue (la place sur l'axe
horizontal).
 layout_height : définit la hauteur qu'elle prend (la place sur l'axe
vertical)

Ces deux attributs peuvent prendre une valeur parmi les trois suivantes :
o fill_parent (match_parent)
o wrap_content
o Valeur numérique ( en dp :Density-
independant Pixel)
LES WIDGETS
 Autres Attributs

 android:id  android:text
 android:layout_weight
 android:hint  android:textSize
 android:textStyle
 android:inputType  android:textColor
 android:src
 android:lines  android:typeface
 android:padding

 android:layout_marginXXX
LES WIDGETS
 Identification des Widgets:

Pour utiliser cet identifiant android:id="@+id/txt“ dans le code JAVA,


on utilise la méthode public View findViewById (int id).
LES WIDGETS
3

Les «
Activity »
41
Qu'est-ce que
Activity ?
• C’est l’interface utilisateur qui apparaît
sur l’écran d’un appareil Android, ils sont
présentées à l'utilisateur sous forme de
fenêtres en plein écran.
• Une application est généralement
composée de plusieurs écrans liés de
manière approximative. Chaque écran est
une activité.
est-ce que une Activity

?
En règle générale, « MainActivity.java »
est spécifiée comme activité "principale",
elle est présentée à l'utilisateur lors du MainActivity SecondActivity

lancement de l'application.

•L'activité principale peut alors démarrer


d'autres activités pour effectuer différentes
actions.
Qu'est-ce que une
Activity ?
Toutes les classes d'activité doivent avoir une déclaration
<activity …/> correspondante dans le fichier
AndroidManifest.xml.
Qu'est-ce que une
Activity ?
• Chaque fois qu'une nouvelle activité
démarre, l'activité précédente
est arrêtée, mais le système
conserve l'activité dans une pile
("backstack").
• Quand une nouvelle activité
commence, cette nouvelle
activité est poussée dans la pile
arrière et prend le focus de
l'utilisateur.
Qu'est-ce que une
Activity
• La pile arrière suit la logique de pile

Lorsque ?
de base "last in, first out".
l'utilisateur termine
l'activité en cours et appuie sur le
bouton précédent, cette activité est
détruite et l'activité précédente
reprend.
Qu'est-ce que une Activity
Navigation et pile "Retour"
?
NavController contient une pile "Retour" contenant les destinations
que l'utilisateur a consultées.
Lorsque l'utilisateur accède aux écrans de votre application,
NavController ajoute et supprime des destinations vers
et depuis la pile "Retour".
En tant que pile, la pile "Retour" est une structure de données
de type "dernier arrivé, premier sorti".
NavController déplace donc les éléments vers le haut
et les fait sortir du haut de la pile.
Qu'est-ce que une Activity
?
• Voici les principaux points à prendre en compte concernant le
comportement de la pile "Retour" :

• Première destination : lorsque l'utilisateur ouvre l'application,


NavController place la première destination en haut de la pile
"Retour« (backstack).
• Transfert vers la pile : chaque appel de NavController.navigate()
place la destination donnée en haut de la pile.
• Affichage de la première destination : appuyer sur Haut ou Retour
appelle respectivement les méthodes NavController.navigateUp() et
NavController.popBackStack(). Elles font sortir la première
destination de la pile
Qu'est-ce que une Activity
?
• Prenons l'exemple suivant :
navController.popBackStack(R.id.destinationId, true)

• Ici, NavController revient à la destination avec l'ID


entier destinationId. Comme la valeur de l'argument
inclusive est true, NavController affiche également
la destination donnée de la pile "Retour".
Activity
Lifecycle

50
4
Les Intents
&
Broadcast
Receiver
PRINCIPE DES INTENTS

Les Intents permettent de gérer l'envoi et la réception de messages afin


de faire coopérer les applications.

Le but des Intents est de déléguer une action à un autre composant, une
autre application ou une autre activité de l'application courante.
PRINCIPE DES INTENTS
•Les Intent sont des messages asynchrones qui permettent
d’envoyer et recevoir des messages (éventuellement avec des données)
pour déclencher une action, dans un composant d’une même
application (exemple : une Activity) voir même dans une autre
application.
TYPES DES INTENTS
Une intention est essentiellement un message que l’on passe à
Android pour lui dire "je veux que tu fasses... quelque chose".
Cette "quelque chose" dépend de la situation :
 on sait parfaitement de quoi il s’agit (Intent
Explicite)
 on ne le sait pas (Intent Implicite)
PRINCIPE DES
INTENTS
• Android prend en charge les Intents explicites (Explicit)
et des Intents implicites (Implicit).
INTENTS
EXPLICITES
 Intents Pour Une Nouvelle Activité
Nom de l’ intention Activité à visiter

Intent myIntent = new Intent (From.this, To.class);

startActivity(myIntent); Activité courante

Lancer l’ intention
INTENTS
EXPLICITES
Il spécifie le composant à appeler à partir de l'activité. En d'autres
termes, nous pouvons appeler une autre activité dans Android par
intention explicite. Également il peut transmettre des informations.

57
AJOUTER DES
INFORMATIONS
Les Intent permettent de transporter des informations à

destination de l'activité cible. On appelle ces informations des

Extra: les méthodes permettant de les manipuler sont getExtra

et putExtra.
AJOUTER DES
INFORMATIONS
Activity 1
Intent call = new Intent(getApplicationContext(), Activity2.class);

call.putExtra(“key", “value");

startActivity(call);
Activity 2
Bundle extras = getIntent().getExtras();

String s = new String(extras.getString(”key"));


INTENTS IMPLICITES
Un objet Intent contient les information suivantes:

 Action à réaliser

 Les données

 Une catégorie
INTENTS
IMPLICITES
Contrairement a l'intention explicite, il ne spécifie pas le
composant. Dans ce cas, l'intention fournit des informations
sur les composants disponibles fournis par le système qui
doit être appelé.

61
ACTIONS À RÉALISER
PARAMÈTRES
INTITULÉ ACTION
ENTRÉES

Indique la classe principale de


ACTION_MAIN
l'application (point d'entrée)

Ouvrir l'activité permettant à


N° de téléphone sous
ACTION_DIAL l'utilisateur de composer un n°
forme URI
de téléphone

Action synonyme à
ACTION_DEFAULT
ACTION_VIEW

Editeur permettant de modifier


ACTION_EDIT des données passées en URI vers les données à éditer
paramètres

ACTION_SENDTO Envoyer un message contact

ACTION_VIEW Visualiser une donnée URI de la donnée à visualiser


ACTIONS À RÉALISER
PARAMÈTRES
INTITULÉ ACTION
ENTRÉES

ACTION_SEARCH Effectuer une recherche texte à rechercher

site web (commençant par


ACTION_WEB_SEARCH Rechercher sur le WEB http:) ou mots à rechercher via
Google
URI vers les données à
ACTION_DELETE Supprimer des données
supprimer

ACTION_INSERT Insérer des données URI où insérer les données

Sélectionner un élément dans


URI à partir duquel choisir un
ACTION_PICK un ensemble de données
élément
 MIME :
DONNÉES
L'action étant déclarée dans le fichier AndroidManifest tout comme la catégorie
et le mime pour notre activité.
Le Mime est donc déclaré dans un intent-filter via l'élément <data
android:mimeType="MIME" />
Par exemple, si nous voulons que notre application traite les fichiers .txt, il
faudra définir le MIME suivant:
text/plain

Il est important de noter qu'un MIME est composé d'un type et d'un sous type. Le
type est ici "text", le sous type est "plain".
DONNÉES

 URI :

Téléphonie
Web

CATÉGORIES
Les catégories sont utilisées dans les filtres d'intentions.

Elles vont permettre au système de choisir l'activité répondant au mieux

à une demande de l'utilisateur. Il peut y avoir plusieurs catégories pour

une même activité.


CATÉGORIES
INTITULÉ DESCRIPTION

permettre de lancer une activité


CATEGORY_DEFAULT
par intention implicite

pour indiquer à Android que votre activité


peut être lancée depuis un navigateur web
CATEGORY_BROWSABLE
pour affiché des données référencé par un
lien
Indique que l'activité est le point d'entrée
CATEGORY_LAUNCHER d'une tache. Il faut donc l'afficher dans
le lanceur d'applications
pour lancer une application de gestions des
CATEGORY_APP_EMAIL
mails (envoi/réception).

avec ACTION_MAIN pour gérer les


CATEGORY_APP_CONTACTS
contacts

avec ACTION_MAIN pour gérer un


CATEGORY_APP_CALENDAR
calendrier
EXEMPLE
 MIME :

Intent intent = new Intent(Intent.ACTION_SEND);

intent.setType("text/plain");

intent.putExtra(android.content.Intent.EXTRA_TEXT, "News for you!");

startActivity(intent);
EXEMPLE
 URl :
String url = "http://www.google.com";

Intent i = new Intent(Intent.ACTION_VIEW);

i.setData(Uri.parse(url));

startActivity(i);
EXEMPLE
 Envoie d’un email :
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
String[] recipients = new String[]{"my@email.com", "",};
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, recipients);
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Test");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Message");
emailIntent.setType("text/plain");
startActivity(Intent.createChooser(emailIntent, "Send email..."));
NIR UN RÉSULTAT D'UNE AC
Le lancement d'une autre activité, qu'il s'agisse d'une activité dans votre
application ou dans une autre, ne doit pas nécessairement être une opération à
sens unique.
Vous pouvez également lancer une activité et recevoir un résultat. Par exemple,
votre application peut lancer une application d'appareil photo et recevoir la
photo prise comme résultat. Vous pouvez également démarrer l'application
Contacts pour que l'utilisateur sélectionne un contact, puis reçoive ses
coordonnées en conséquence.
OBTENIR UN RÉSULTAT D'UNE ACTIVITÉ

• On utilise pour cela la méthode


startActivityForResult qui envoie un code de
retour à l'activité enfant.
Lorsque l'activité parent reprend la main, il
devient possible de filtrer le code de retour dans
la méthode onActivityResult pour savoir si l'on
revient ou pas de l'activité enfant.
NIR UN RÉSULTAT D'UNE AC

Il est aussi possible de définir un résultat d'activité, avant


d'appeler explicitement la fin d'une activité avec la méthode
finish(). Dans ce cas, la méthode setResult(CODE, Intent) permet
d'enregistrer un code de retour qu'il sera aussi possible de le filtrer
dans l'activité parente.
NIR UN RÉSULTAT D'UNE AC
Démarrer une activité
Static final int PICK_CONTACT_REQUEST = 1; // Le code de requête
...
Private void pickContact () {

Intent pickContactIntent =
new Intent (Intent.ACTION_PICK , Uri.parse ( "content: // contacts"));

pickContactIntent.setType (Phone.CONTENT_TYPE); // Afficher uniquement les


contacts utilisateur avec les numéros de téléphone

StartActivityForResult (pickContactIntent, PICK_CONTACT_REQUEST);


}
NIR UN RÉSULTAT D'UNE AC
Recevoir le résultat
Le système appelle de votre activité la méthode onActivityResult().
Cette méthode comprend trois arguments:
 Le code de demande que vous avez passé à startActivityForResult() .
 Code de résultat spécifié par la deuxième activité. Ceci est
soit RESULT_OK si l'opération a réussi ou RESULT_CANCELED si
l'opération a échoué pour une raison quelconque.
 Une Intent qui porte les données de résultat.
NIR UN RÉSULTAT D'UNE AC
Protected void onActivityResult (int requestCode, int resultCode, Intent data) {

// Vérifiez la requête à laquelle nous répondons


If (requestCode == PICK_CONTACT_REQUEST) {

// Assurez-vous que la demande a réussi


If (resultCode == RESULT_OK) {

// Faites quelque chose avec le contact ici


}
}
}
BROADCASTER DES
INFORMATIONS
Il est aussi possible d'utiliser un objet Intent pour broadcaster

un message à but informatif. Ainsi, toutes les applications

pourront capturer ce message et récupérer l'information.


RÉCEPTION DES
BROADCASTERS
 Les messages broadcastés par les applications sont réceptionnées par une

classe héritant de BroadcastReceiver.

 Cette classe doit surcharger la méthode onReceive( ).

 Dans le Manifest, un filtre doit être inséré dans un tag receiver qui pointe

vers la classe se chargeant des messages.


RÉCEPTION DES
BROADCASTERS
<application android:icon="@drawable/icon"
android:label="@string/app_name">
<receiver android:name="MyBroadcastReceiver">
<intent-filter>
<action android:name="andro.actionname.broadcast" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>

Vous aimerez peut-être aussi