Vous êtes sur la page 1sur 19

Développement d’applications mobiles

– Cours 9 –
Chapitre 6 : Evènements et intentions (2/2)

Dr. CHAOUCHE A.-C.


Faculté des nouvelles technologies
ahmed.chaouche@univ-constantine2.dz

Université Constantine 2 2018/2019. Semestre 1


Développement d’applications mobiles
– Cours 9 –
Chapitre 6 : Evènements et intentions (2/2)

Dr. CHAOUCHE A.-C.


Faculté des nouvelles technologies
ahmed.chaouche@univ-constantine2.dz

Etudiants concernés
Faculté/Institut Département Niveau Spécialité

Nouvelles technologies IFA Licence 3 Technologies de l’information (TI)


Nouvelles technologies IFA Licence 3 Science de l’informatique (SCI)

Université Constantine 2 2018/2019. Semestre 1


Résumé

Prérequis
Maîtrise de Android Studio
Création et exécution d’un projet Android

Objectifs du cours
Passer d’une activité à une autre
Transférer des données entre les activités
Détecter et résoudre des exceptions

Université Constantine 2 © Dr. Chaouche A.-C. 3


Pile des activités (1/2)

Université Constantine 2 © Dr. Chaouche A.-C. 4


Pile des activités (2/2)
Les activités sont empilées/dépilées
Empilée quand une activité démarre
Dépilée (détruite) quand on presse le bouton "BACK"
Une pression sur le bouton "HOME" ne dépile pas l'activité (passe simplement en
arrière plan)

Université Constantine 2 © Dr. Chaouche A.-C. 5


Intentions

Gérer l'envoi et la réception de messages afin de faire coopérer les


activités (ou même les applications)
Déléguer une action à un composant, une application ou une activité de
l'application courante.
3 cas d’usage principaux des intents
Pour démarrer une activité :
en utilisant startActivity(Intent), l’intent décrit l’activité et ses paramètres
Pour démarrer un service :
en appellant startService(Intent), démarrer un service (application sans IHM)
Pour envoyer un broadcast :
en utilisant sendBroadcast(Intent), un broadcast est un message que toute
application peut recevoir

Université Constantine 2 © Dr. Chaouche A.-C. 6


Types d'intentions (1/2)
Intent implicite

Donner le nom d’une action générale


Un composant d’une autre application peut traiter l’action
Le système trouve la bonne application en utilisant les intent-filters
déclarés dans le manifest

Intent
Main Système

/java/MainActivity.java
...
Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:031xxxxxx"));
startActivity(intent);

Université Constantine 2 © Dr. Chaouche A.-C. 7


Types d'intentions (2/2)
Intent explicite

Fournir le nom de la classe de l’activité à démarrer


Les activités doivent être de la même application

Intent
Main Other

/java/MainActivity.java
...
Intent intent = new Intent(this, OtherActivity.class);
startActivity(intent);

Université Constantine 2 © Dr. Chaouche A.-C. 8


TP2b : Passage d’une activité à une autre

Créer une activité ModulesActivity


Après vérification des champs,
Faire le passage vers ModulesActivity

Université Constantine 2 © Dr. Chaouche A.-C. 9


Transfert de données

/java/MainActivity.java
Intent intent = new Intent(this, OtherActivity.class);
Bundle bundle = new Bundle();
bundle.putString("nom", "toto");
bundle.putString("prenom", "bobo");
intent.putExtras(bundle); Intent
startActivity(intent); Main Other

/java/OtherActivity.java (nom,toto)
(prenom,bobo)
Intent intent = getIntent();
Bundle
Bundle bundle = intent.getExtras();
String nom = bundle.getString("nom");
String prenom = bundle.getString("prenom");

Les types complexes (c-à-d les objets) doivent implémenter l’interface


Parcelable, ou Serializable

Université Constantine 2 © Dr. Chaouche A.-C. 10


Transfert d’objets complexes (1/2)

Passage d’un type complexe (objet) est réalisé à travers la sérialisation


La sérialisation (Marshaling) permet de rendre un objet persistant pour
un stockage ou un échange
Sérialiser un objet consiste à le convertir en un tableau d'octets, qui
pourra être reconstitué à l'identique à la réception
Sa reconversion vers sa représentation initiale (dans la mémoire) est
appelée désérialisation (unmarshaling)
La classe de l’objet à sérialiser doit implémenter l'interface Serializable

Réseau
Obj Fichier Obj
BDD
Sérialisation Désérialisation

Université Constantine 2 © Dr. Chaouche A.-C. 11


Transfert d’objets complexes (2/2)
/java/Module.java
public class Module implements Serializable {
...
}
Intent
/java/MainActivity.java Main Other

Module m = new Module(...);


Intent intent = new Intent(this, OtherActivity.class);
Bundle bundle = new Bundle();
(obj,[Module])
bundle.putSerializable("obj", m);
intent.putExtras(bundle); Bundle
startActivity(intent);

/java/OtherActivity.java
Intent intent = getIntent();
Bundle bundle = intent.getExtras();
Module m = (Module) bundle.getSerializable("obj");

Université Constantine 2 © Dr. Chaouche A.-C. 12


Retour d’une activité
/java/MainActivity.java
Intent intentInput = new Intent(this, OtherActivity.class);
1
startActivityForResult(intentInput, 99);
...
protected void onActivityResult(int requestCode, int resultCode, Intent intentOutput){
4 if(requestCode == 99 && resultCode == RESULT_OK)){ ... }
}

intentInput
/java/OtherActivity.java 99
Main Other
Intent intentInput = getIntent(); intentOutput
2 RESULT_OK
Bundle bundle = intentInput.getExtras();
... ... ... finish();
@Override
public void finish(){ (result,...)
Intent intentOutput = new Intent();
intentOutput.putExtra("result", "..."); Bundle
3 setResult(RESULT_OK, intentOutput);
super.finish();
}

Université Constantine 2 © Dr. Chaouche A.-C. 13


Détection et résolution des exceptions

Etapes :
1. Aller à Android monitor > logCat
2. S'assurer que l'appareil et l'application sont bien sélectionnés
3. Filtrer les Logs de type "Error"
4. Identifier l'exception et corriger le code en fonction

1 3

Université Constantine 2 © Dr. Chaouche A.-C. 14


TP2c : Transfert de données entre les activités

Faire le passage vers ModulesActivity


Transférer l'identifiant et le mot de passe dans l'Intent
Afficher l’identifiant et le mot de passe dans un TextView

Université Constantine 2 © Dr. Chaouche A.-C. 15


Documents et Rendus

Documents sont accessibles :


Plateforme e-learning de l’université Constantine 2
Lien : http://elearning.univ-constantine2.dz/

Rendus du TP 2 :
Avant le Samedi 2 décembre à 23h59
À : ac.chaouche@misc-umc.org

Nom du fichier à rendre :


DAM_TP2_G%_NOMBINOME1_NOMBINOME2.zip
(Ex : DAM_TP2_G1_CHAOUCHE_NECIBI.zip)
Le fichier zip doit contenir seulement le dossier src

Université Constantine 2 © Dr. Chaouche A.-C. 16


Quelques liens utiles

Intentions :
http://vogella.developpez.com/tutoriels/android/utilisation-intents/

Sérialisation sous Android :


http://www.supinfo.com/articles/single/1550-serialisation-objet-android

Université Constantine 2 © Dr. Chaouche A.-C. 17


Références
Android Developer, «Tasks and Back Stack,». Lien : https://developer.
android.com/guide/components/activities/tasks-and-back-stack.html.
Android Developer, «References - Android Plateform API 26 : Intent,». Lien:
https://developer.android.com/reference/android/content/Intent.html.
Android Developer, «Start Another Activity,». Lien : https://developer.
android.com/training/basics/firstapp/starting-activity.html.
Android Developer, «References - Android Plateform API 26 : Serializable,». Lien :
https://developer.android.com/reference/java/io/Serializable.html.
Android Developer, «References - Android Plateform API 26 : Parcelable,». Lien :
developer.android.com/reference/android/os/Parcelable.html.
C. Izuchukwu, «How to Pass Data Between Activities With Android Parcelable,» 2
Octobre 2017. Lien : https://code.tutsplus.com/tutorials/ how-to-pass-data-
between-activities-with-android-parcelable--cms-29559.
Android Developer, «Getting a Result from an Activity,». Lien :
https://developer.android.com/training/basics/intents/result.html.

Université Constantine 2 © Dr. Chaouche A.-C. 18


Prochain chapitre

Chapitre 7 : Vues à adaptateur et boites de dialogue

Objectifs :
Créer et manipuler des vues à adaptateur (ListView, ...)
Créer et afficher une boite de dialogue

Université Constantine 2 © Dr. Chaouche A.-C. 19