Élèves du CNAM, identifiez vous :
Entrez votre identifiant INE (entrez les lettres en majuscule) :

Logo du CNAM

Mise à jour : (Samedi 04 Février 2023, 16:53)

Licence Creative Commons
Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 France.
CP48 :
Développeur d’applications mobiles
2018-2019

Flux RSS du Site Jean-Ferdy Susini


Cette page est dédiée aux interventions dont j'ai la charge dans le cadre du Certificat Professionnel (CP48) : Développeur d’applications mobiles du CNAM. La page de l'an dernier reste accessible Site 2017-2018.
Sur cette page vous trouverez :

Vous pouvez bookmarker cette page une fois avoir été correctement identifié, cela vous évitera de rentrer à nouveau votre INE.

Nouvelles


NFA022 : Principes et programmation système et réseau pour smart-phones et tablettes tactiles

Support de cours et liens utiles


NFA025 : Mise en œuvre de la programmation de smart-phones et tablettes tactiles

Support de cours et liens utiles

Éléments de correction des EDs

Éléments de correction de l'ED1
Elements de correction : NFA025_2016_ED1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED1/Files.jar (39 Ko)

Exercice 1

La réponse à ce premier exercice diverge un peu de l'énoncé, pour présenter quelques éléments supplémentaires.

Pour des raisons de simplicité de distribution du code tout a été regroupé en seul fichier source : le fichier Combat.java. La classe Combat contient essentiellement une méthode main() qui implante la boucle de gestion du combat.

La structure de la solution proposée est la suivante :
  • une classe Combat implante en quelque sorte le «moteur de jeu» qui va calculer de façon itérative les différentes actions du combat.
  • une classe Personnage définit des objets personnage avec leurs caractéristiques principales :
    • nom
    • classe d'armure
    • points de vie
  • une classe Arme implante une arme avec son bonus d"attaque et les dégâts maximum qu'elle peut infliger.
  • une classe PersonnageArme qui étend la classe Personnage pour lui permettre de tenir un arme.
  • Enfin la classe De implante le tirage de dés en proposant en quelques sortes des fonctions utilitaires (méthodes de classe) basées sur Math.random()
Exercice 2

Pour implanter cet exercice on crée une unique classe Duree. Cette classe possède une méthode main() afin de tester l'implantation de la classe.

Une particularité de cette implantation est la définition d'une classe interne : DureeInvalideException qui implante une Exception qui sera levée à la construction d'un objet durée, si les paramètres de la durée se révèle être invalides. C'est-à-dire si les heures sont négatives ou que les minutes ne sont pas comprises entre 0 et 60.
Exercice 3

Pour implanter cet exercice on crée une unique classe RendezVous.

Cet exercice est très simple et l'immutabilité de la classe RendezVous est assuré par le fait que l'accès au champs de la classe est restreint à privé et qu'aucun setter (méthode permettant de changer directement la valeur d'un champ) n'est fournit.

Comment aurait-on pu forcer un peu plus ce caractère imutable de la classe ?

Exercice 4

Cet exercice a pour but de vous faire découvrir les interfaces et l'usage de classes internes voir de classes anonymes que l'on rencontre très fréquemment dans le monde Android. En soit, l'exercice a pu sembler «capillo-tracté» à certains d'entre vous et c'est compréhensible, mais le débat qui a eu lieu sur le forum était intéressant.

Object
Arme
Combat
De
Personnage
Throwable
Duree
RendezVous
VehiculeRacine
fr.cnam.nfa025.ed1.ex4.Moto$1
fr.cnam.nfa025.ed1.ex4.PoidsLourd$1
RoueImpl
fr.cnam.nfa025.ed1.ex4.Voiture$1
VoitureTest
PersonnageArme
Exception
PoidsLourd
Moto
Voiture
DureeInvalideException
Bus
Camion
Tracteur
Enumeration
Roue
Vehicule
src/fr/cnam/nfa025/ed1/ex1/Combat.java
src/fr/cnam/nfa025/ed1/ex2/Duree.java
src/fr/cnam/nfa025/ed1/ex3/RendezVous.java
src/fr/cnam/nfa025/ed1/ex4/Vehicule.java
src/fr/cnam/nfa025/ed1/ex4/Roue.java
src/fr/cnam/nfa025/ed1/ex4/VoitureTest.java
src/fr/cnam/nfa025/ed1/ex4/Suite.java

 Tous les fichiers  Masquer les fichiers 

Le moteur de jeu qui simule le combat entre Beowulf et Grendel

La classe Duree, illustration de la définition d'objets immutables (ancien sujet d'examen)

La classe RendezVous, qui est proposée pour l'essentiel dans le sujet (ancien sujet d'examen)

L'interface Vehicule

L'interface Roue

L'interface Roue

L'interface Roue

Éléments de correction de l'ED2
Elements de correction : NFA025_2016_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED2/Files.jar (53 Ko)

Exercice 1

La correction de cet exercice est assez directe : le code commenté indique les erreurs qu'il fallait corriger et leur nature.

La trace d'exécution des différents scénarios est obtenu à l'aide du simulateur en utilisant par exemple la personnalité DDMS d'éclipse ou d'Android Studio. Les capture d'écran associées à cet exercice sont des captures du logcat filtrées à l'aide du TAG : CNAM_NFA025_TAG.
Exercice 2
Une fois encore la correction est assez simple et reprend le principe du premier Exercice. La correction propose ici d'appeler l'activité CycleDeVie. On profite de cet exercice pour parler d'une méthode qui n'avait pas été considérée jusque là et que nous découvriront dans le cours sur les Intents mais qui est la méthode onActivityResult() et qui joue bien un rôle particulier dans la gestion du cycle de vie d'une activité.
Exercice 3
Question 1
C'est une question de cours assez facile !
Le fichier AndroidManifest.xml permet au moment de l'installation de l'application sur le terminal au PackageManager du système de connaître les différents composants applicatifs contenus par le package installé. Comme c'est le système Android qui instancie les composants et non le développeur de l'application son rôle est très important car sans une déclaration correcte des composants dans ce fichier, ils seront inutilisables.
Question 2
Comme les exercices sont extraits des sujets d'examen des années passées, les réponses vont parfois dépasser le cadre stricte du cours et anticiper sur les cours à venir. Je n'attends pas de votre part de pouvoir répondre forcément à tout mais au moins au problème principal soulevé par la question.

La question est assez classique. On donne ici un fichier AM_3.xml qui n'est pas associé à une application particulière (ne pas l'ajouter tel quel à un projet, ça ne marcherait pas) mais constitue la réponse à la question. Ce fichier très commenté est en fait très simple à écrire (masquez les commentaires pour vous en convaincre).

Question 3
On rajoute les éléments suivants au fichier AM_3.xml :


Question 4
La question est assez standard et la réponse se trouve dans le fichier MonAvtivite.java.
Question 5
Question assez classique également : la réponse se trouve dans le fichier Navigateur.java.
Exercice 4
On reprend le code de l'exercice de l'ED1 mais on étend un peu la modélisation afin de faciliter l'intégration dans une application Android. On ajoute en particulier la notion d'Arene gérant le combat. L'Arene jouera le rôle de modèle de données, l'activité Combat jouera le rôle de contrôleur et notre interface définit en XML le rôle de vue dans le patron de conception MVC.

Voir directement le code de la solution.

Exercice 5
Question 1

Les erreurs sont commentées dans le code.

Question 2
La méthode onSaveInstanceState(Bundle) permet de sauvegarder l'état courant de l'activité avant un arrêt imprévu. Lorsque l'activité est arrêtée par le système pour des raisons externes au comportement même de l'activité (l'activité est masquée par une autre, le système arrête l'activité pour récupérer de l'espace mémoire, le système arrête l'activité pour prendre en charge une rotation de l'orientation de la GUI…), cette méthode est appelée et le système fournit alors une référence à un objet de type Bundle (jouant le rôle de coffre fort) où le développeur de l'activité stockera les éléments importants de l'état de l'activité pour reprendre son exécution plus tard. Cette méthode n'est pas appelée par exemple si l'activité quitte normalement (appel à la méthode finish())
Exercice 6
Question 1

C'est une question de cours assez classique. Bien penser à préciser le rôle de ce fichier du point de vue du système d'exploitation Android. Pourquoi est-il nécessaire que tous les composants soient déclarés dans ce fichier...

Voir ensuite le fichier AM_6.xml pour avoir une idée du fichier à écrire.
Question 2
voir le fichier correspondant dans les réponses.
Question 3
Question de cours : Expliquer la nature de cet objet (une structure de type dictionnaire associant des valeurs à des clés). il est de type Parcelable. Le type Parcelable implique qu'il peut être transformé en un flux binaire et par l'usage du mécanisme des Binder, il permet d'extirper des données d'un processus pour les mettre en lieu sur (préservé par le système android)... Illustrer par exemple son rôle dans la gestion de la rotation de l'interface graphique passant du mode portrait au mode paysage. Lister les opérations réalisées et en particulier celles où intervient le Bundle
NFA025_2016_ED2}: Screen1
NFA025_2016_ED2}: Screen2
NFA025_2016_ED2}: Screen3
NFA025_2016_ED2}: Screen4
NFA025_2016_ED2}: Screen5
NFA025_2016_ED2}: Screen6
NFA025_2016_ED2}: Screen7
NFA025_2016_ED2}: Screen8
NFA025_2016_ED2}: Screen9
NFA025_2016_ED2}: Screen10
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
ED2
CycleDeVie
./AndroidManifest.xml
./res/layout/main.xml
./res/layout/ex2main.xml
./res/layout/combat.xml
./res/values/strings.xml
./src/fr/cnam/nfa025/ed2/ED2.java
./src/fr/cnam/nfa025/ed2/CycleDeVie.java
./src/fr/cnam/nfa025/ed2/MonActivite.java
./src/fr/cnam/nfa025/ed2/Navigateur.java
./src/fr/cnam/nfa025/ed2/ActiviteCombat.java
./src/fr/cnam/nfa025/ed2/Arene.java
./src/fr/cnam/nfa025/ed2/Combattant.java
./src/fr/cnam/nfa025/ed2/Personnage.java
./src/fr/cnam/nfa025/ed2/Soldat.java
./src/fr/cnam/nfa025/ed2/Arme.java
./src/fr/cnam/nfa025/ed2/ResultatAttaque.java
./src/fr/cnam/nfa025/ed2/De.java
./res/drawable/ic_launcher.png
./res/drawable/nav_icon.png
./AM_3.xml
./src/fr/cnam/nfa025/chasse/ChasseAuTresor.java
./src/fr/cnam/nfa025/throwit/MenuPrincipal.java
./AndroidManifest.xml

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application. Dans ce fichier manifest on retrouve regroupé en une seule application les activités de 4 exercices.

L'interface graphique correspondante à l'activité ED2

L'interface graphique correspondante à l'activité CycleDeVie

L'interface graphique correspondante à l'activité Combat

Le fichier chaînes de caractères :

L'activité principale

L'activité du deuxième exercice

L'activité MonActivite du troisième exercice

L'activité Navigateur du troisième exercice

L'activité ActiviteCombat du quatrième exercice

L'Arene isole le moteur de jeu (modèle et évolution du monde) du controleur qu'est l'activité. Ainsi seules 2 interfaces permettent d'accèder aux données de l'extérieur.

Interface définissant les informations accessibles d'un combattant

Implantation de base de l'interface Combattant

hérite de Personnage en lui ajoutant une arme

implante une arme

Interface définissant les informations accessibles à la suite d'une attaque.

classe gérant des tirages de dés.

icône générée automatiquement à la création du projet

icône de l'activité Navigateur

Réponse à la question 2 de l'exercice 3 ne constitue pas un projet en soit, il s'agit juste d'une réponse typique à la question qui était posée.

Correction des erreurs de la question 5.

Squelette de l'activité décrite dans la question 6.

Réponse à la question 2 de l'exercice 5, ne constitue pas un projet en soit, il s'agit juste d'une réponse typique à la question qui était posée.

Elements de correction : NFA025_2018_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2018_ED2/Files.jar (9 Ko)

Exercice 7
Malgré le contexte peut-être surprenant de l'application, l'exercice reste un très grand classique.

La correction est dans les commentaires du fichier HoloWorld.java

Vous pouvez vérifier le comportement de l'IDE et du terminal en copiant le fichier source dans un projet Android.
Exercice 8
Cet exercice porte sur la définition du fichier AndroidManifest.xml associée à l'application « Guide Touristique ». C'est un fichier fondamental permettant l'installation de votre application sur un terminal Android ; il doit donc être correctement renseigné et pour ce faire, il est capital que vous en compreniez le contenu. La réponse à cet exercice est donc directement donné dans le source suivant :



Exercice 9
Question 1
La question ne comporte pas de difficultés particulières. Il s'agit essentiellement d'une question de cours sur le rôle du fichier AndroidManifest.xml et qui se termine par la production d'un code équivalent au suivant :



Question 2
Les erreurs sont notées sous la forme de commentaires dans le fichier fr/cnam/nfa025/ed2/part2/Trousse.java.
Exercice 10
Question 1
Question classique les réponses sont commentées dans le fichier source fr/cnam/nfa025/ed2/part2/Menu.java
Question 2
Question de cours.
La méthode onSaveInstanceState(Bundle) est une méthode importante de la gestion du cycle de vie d'une activité car elle permet de mettre en sécurité des informations importante portée par l'activité lorsque celle-ci perd l'attention de l'utilisateur. Dès que l'activité se retrouve masquée (partiellement ou totalement), le système crée un objet de type Bundle et appelle cette méthode afin que l'activité puisse y stocker les données qu'elle doit préserver. En effet, l'activité pourra être à tout moment arrêtée par le système à partir du moment où elle a perdu l'attention de l'utilisateur. Les données ainsi sauvée pourront être retrouvées au redémarrage de l'activité (méthode onCreate(Bundle) et/ou méthode onRestoreInstanceState(Bundle)).
Exercice 11
Question 1
Là encore on retrouve une question très classique. qui aboutira à écrire le fichier AndroidManifest.xml ayant la forme suivante :


Question 2
Question classique dont la réponse est donnée par le fichier fr/cnam/nfa025/ed2/part2/MusicController.java
Question 3
cf captue d'écran.
NFA025_2018_ED2}: Screen1
NFA025_2018_ED2}: Screen2
NFA025_2018_ED2}: Screen3
Object
Context
Outils
ContextWrapper
ContextThemeWrapper
Activity
MusicController
Menu
Trousse
HoloWorld
./AndroidManifest.xml
res/layout/controller.xml
res/layout/main.xml
res/values/strings.xml
src/fr/cnam/nfa025/ed2/part2/Trousse.java
src/fr/cnam/nfa025/ed2/part2/Outils.java
src/fr/cnam/nfa025/ed2/part2/MusicController.java
src/fr/cnam/nfa025/ed2/part2/Menu.java
src/fr/cnam/nfa025/ed2/part2/HoloWorld.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

layout android

layout android

values android

source code Trousse.java

source code Outils.java

source code MusicController.java

source code Menu.java

source code HoloWorld.java

Éléments de correction de l'ED3
Elements de correction : NFA025_2016_ED3

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED3/Files.jar (180 Ko)

Exercice 1
Question 1
l'interface graphique correspondant au fichier layout XML proposé correspond à peu près à la capture d'écran suivante :

Image ED3 Exo1

il n'y a pas de pièges particulier ici, et le dessin est assez simple à réaliser sur la feuille. Une remarque cependant : l'interface utilise des poids dans un linearlayout, il faut donc donner une idée des proportions accordées à chaque widget, mais il n'est pas attendu un placement précis (aucun calcul n'est attendu).
Question 2
La réponse attendue ici est dans le code Java de l'activité portant cette interface. L'identifiant button1 pourra être utilisé pour récupérer une référence sur l'objet java implantant le bouton grâce à la méthode findViewById() de l'activité.

Une autre utilisation possible serait dans la méthode traitant les onClick de l'activité (méthode définie par le développeur de l'application). L'identifiant de la vue obtenu en appelant la méthode getId() sur la vue passée en paramètre permettrait de discriminer le click sur un bouton ou sur un autre.

Question 3
Le texte affiché par le bouton lorsque l'affichage de l'activité est actif n'est pas celui contenu dans l'attribut android:text comme on pourrait le supposer. En fait, la valeur associée à cet attribut est particulière et sa syntaxe est celle d'une commande pour le système android. Cette commande va permettre au système de substituer la véritable valeur au moment de l'affichage. La syntaxe de cette commande s'interprète de la manière suivante : le caractère @ en premier indique qu'il s'agit d'une référence à une ressource et non d'une valeur codée en dur. Ensuite vient le type de la ressource : string décrivant le type chaîne de caractères. Le caractère / suivant sert de séparateur entre le nom du type de ressource et le nom de la ressource elle même qui suit. Le dernier élément est donc le nom de la ressource elle même. Ce nom est utilisé par le système android pour retrouver parmi les ressources chaînes de caractères la chaîne voulue par le développeur de l'application (ici le nom de la ressource est libBouton).

Cela signifie que dans le dossier res/value de son application, le développeur à donné la description d'une ressource de type string avec le nom libBouton dans un fichier XML.

Question 4
Le fichier ex1_string.xml contient la liste des ressource chaînes de caractères associée à cette interface.
Exercice 2
Question 1
Le code source donné dans les éléments de réponses présente différent layouts android. Un premier placement est réalisé à partir de LinearLayout et le second à partir d'un RelativeLayout. À l'examen sur ce type de question, vous êtes libres de proposer l'implantation que vous voulez du moment que vous parvenez à respecter les grandes lignes de l'interface qui vous est présentée ici.
Question 2
Une des caractéristiques du système de gestion des ressources applicatives est sa capacité à s'adapter automatiquement à certaines caractéristiques du système au moment du chargement des ressources.
Petit rappel concernant la gestion des ressources android
Ainsi les dossier res d'une application android possède un certains nombres de ressources décrites dans des fichiers XML ou placées dans des sous-dossiers spécifiques. Dans le cadre de cette UE, noune nous intéresserons essentiellement qu'à 3 sous-dossiers principaux :
  • drawable : sous-dossier contenant des fichiers images (généralement au format png). Le nom des fichiers images doit-être un nom de ressources (c'est-à -dire une chaîne de caractères uniquement constituée de lettres minuscules et du caractère _). Ces ressources sont consignées par le processus de compilation qui génère des identifiants dans la classe R.drawable. Permettant de référencer chaque image du dossier drawable. Dans les fichiers XML les ressources sont référencées dans les valeurs d'attributs des balises grâce à la syntaxe : @drawable/nom_de_l_image.
  • layout : sous-dossier contenant des fichiers layout (généralement au format XML). Le nom des fichiers images doit être un nom des ressources (c'est-à-dire uniquement constitués de lettres minuscules et du caractère _). Comme pour les images, les ressources de type layout sont consignées par le processus de compilation qui génère des identifiants dans la classe R.layout. Permettant de référencer chaque image du dossier layout. Dans les fichiers XML les ressources sont référencées dans les valeurs d'attributs des balises grâce à la syntaxe : @layout/nom_du_layout.
  • values : sous-dossier contenant des fichiers XML contenant des ressources de différents type :
    • string : chaînes de caractères;
    • dimension : dimensions utilisées dans les layout XML;
    • color : code d'une couleur utilisable pour peindre l'écran.
    Le nom des fichiers ressources n'a pas d'importances (doit terminer par l'extension .xml). Par contre les fichiers ressources doivent contenir des déclarations de ressources XML (un document dont l'élément racine est définit par la balise resource) et contenant des éléments de type string, integers, dimension, color…. Les ressources sont référencées dans du code Java grâce à la classe R générée automatiquement par le processus de compilation qui analyse tous les fichiers XML présents dans res/values et consignes les différentes ressources en rcréant des entrées correspondantes dans les classes R.string, R.integer, R.color, R.dimension… Tandis que les ressources sont référencées dans les fichiers XML par les références de la forme : @string/nom_de_la_chaine, @integer/nom_de_l_entier, @dimension/nom_de_la_dimension

Le point fort de ce mécanisme de gestion de ressources est qu'il permet de charger des versions adapté des ressources à certaines caractéristiques du terminal considéré au moment du chargement de la ressource et non à la compilation : par exemple, prenons le cas d'une ressource de type chaîne de caractères "Hello World !". Il sera possible de charger une version par défaut de la ressource généralement déclarée dans le dossier values. Mais si le terminal est configuré pour utiliser la langue française il est possible de donner une version française de la chaîne de caractères en définissant la même ressources (avec le même identifiant) dans un autre sous-dossier values suffixé par -fr : le sous dossier res/values-fr. Ce sous dossier pourra contenir une version française des ressources de l'application que ce soient des chaînes de carctères, des entiers, des dimensions, des couleurs…

De façon identique on pourra créer un layout adapté aux système français en enregistrant la version francisée du layout dans le dossier res/layout-fr.

Dans cet exercice, on va proposer pour chacun des deux layout une version par défaut (dossier res/layout) et une version à utiliser lorsque le téléphone est en mode paysage (suffixe -land) dans le dossier res/layout-land.

Exercice 3
La solution présentée ici n'est probablement pas la solution la plus directe à l'exercice mais elle permet d'illustrer 2 techniques particulières :
  • l'utilisation des poids dans un LinearLayout. En particulier lorsque plus de 2 éléments sont à placer.
  • le deuxième est l'utilisation d'une balise très importante et sous-estimée : la balise include. De nos jours la notion de fragment est mise en avant, mais la balise include peut déjà répondre à certains problèmes auxquels les fragments sont supposés traiter.
Exercice 4
Question 1 et 2
Cette exercice ne présente pas de grosse difficultés seule la gestion des polices de caractères qui suit des règles un peu différentes peut poser des problèmes (la gestion des polices de caractères n'est pas au programme et donc à l'examen n'a pas compté mais elle donné ici à titre d'exemple).
Exercice 5
Question 1
Là encore l'exercice est assez classique, la difficulté principale reposant plus sur la longueur de l'exercice qui a beaucoup découragé (et un peu également la gestion des boutons radio).
Question 2
Ce fichier layout comporte quelques pièges (par exemple android:hint sur des Boutons). Il faut bien être attentif pendant la lecture du fichier XML. Je vous engage à d'abord essayer de dessiner l'IHM à partir du code source avant de regarder compiler la réponse. Cela vous permettra peut-être de prendre conscience des pièges.
Exercice 6
Question 1
pas de difficultés majeures si ce n'est de faire attention à respecter les proportions : les 2 derniers widgets sont moins haut que les gros boutons (les 2 dernière lignes ont la hauteur d'un bouton environ).
Question 2
Pas de difficultés particulières.
Exercice 7
Pas de difficultés particulières.
Exercice 8
Pas de difficultés particulières. On portera seulement un attention particulière sur la définition des ressources. Certains identifiants ont été récrits.
NFA025_2016_ED3}: Screen1
NFA025_2016_ED3}: Screen2
NFA025_2016_ED3}: Screen3
NFA025_2016_ED3}: Screen4
NFA025_2016_ED3}: Screen5
NFA025_2016_ED3}: Screen6
NFA025_2016_ED3}: Screen7
NFA025_2016_ED3}: Screen8
NFA025_2016_ED3}: Screen9
Object
Context
RendezVous
ContextWrapper
ContextThemeWrapper
Activity
ActiviteAgenda
ActiviteExo4
ActiviteExo5
ActiviteExo6
ActiviteIdentification
ChasseAuTresor
Exercice1Activity
MenuPrincipal
AndroidManifest.xml
res/layout/ex1_main.xml
res/values/ex1_strings.xml
src/fr/cnam/nfa025/ed3/Exercice1Activity.java
res/layout/ed3_ex2_avecll.xml
res/layout/ed3_ex2_avecrl.xml
res/layout-land/ed3_ex2_avecll.xml
res/layout-land/ed3_ex2_avecrl.xml
res/values/Ex2_strings.xml
res/drawable/logo_cnam.png
res/drawable-land/logo_cnam.png
src/fr/cnam/nfa025/ed3/ActiviteIdentification.java
res/layout/ed3_ex3_main.xml
res/layout/entree_date.xml
res/values/ed3_ex3_strings.xml
src/fr/cnam/nfa025/ed3/ActiviteAgenda.java
src/fr/cnam/nfa025/ed3/RendezVous.java
src/fr/cnam/nfa025/ed3/ActiviteExo4.java
res/layout/ed3_ex4.xml
res/layout/ed3_ex4_2.xml
res/values/ed3_ex4_strings.xml
res/drawable/hp_wand.png
res/layout/ed3_ex5_1.xml
res/layout/ed3_ex5_2.xml
res/values/strings_Ex5.xml
src/fr/cnam/nfa025/ed3/ActiviteExo5.java
res/layout/ed3_ex6_1.xml
res/layout/ed3_ex6_2.xml
res/values/ed3_ex6_str.xml
src/fr/cnam/nfa025/ed3/ActiviteExo6.java
res/drawable/back.png
res/drawable/foreward.png
res/layout/chasse.xml
src/fr/cnam/nfa025/ed3/ChasseAuTresor.java
res/values/ed3_ex7_rsrc.xml
res/layout/lance.xml
src/fr/cnam/nfa025/ed3/MenuPrincipal.java
res/values/lance_rsrc.xml

 Tous les fichiers  Masquer les fichiers 

Le manifest android contenat les point d'entrée de tous les exercices (1 à 6)

L'interface graphique correspondant à l'exercice 1 :

Le fichier chaînes de caractères de l'exercice 1 :

L'activité principale de l'exercice 1

L'interface graphique en mode portrait de l'exercice 2 construite avec des LinearLayout :

L'interface graphique en mode portrait de l'exercice 2 construite avec des RelativeLayout :

L'interface graphique en mode paysage de l'exercice 2 construite avec des LinearLayout :

L'interface graphique en mode paysage de l'exercice 2 construite avec desRelativeLayout :

Le fichier chaînes de caractères de l'exercice 2 :

Le fichier image contenant le logo du CNAM :

Le fichier image contenant le logo du CNAM :

L'activité principale de l'exercice 2

L'interface graphique de l'Exercice 3

Le layout inclus supplémentaire de l'Exercice 3

Le fichier chaînes de caractères de l'Exercice 3

L'activité principale de l'exercice 3

La classe RendezVous de l'exercice 3

L'activité de l'exercice 4

Le layout de la première question de l'exercice 4

Le layout de la deuxième question de l'exercice 4

Les ressources chaînes de caractères de l'exercice 4

Le fichier image de la baguette

Le layout de la question 1 de l'exercice 5

Le layout de la question 2 de l'exercice 5

Les ressources chaînes de caractères de l'exercice 5

L'activité de l'exercice 5

Le layout de la question 1 de l'exercice 6

Le layout de la question 2 de l'exercice 6

Les ressources chaînes de caractères de l'exercice 6

L'activité de l'exercice 6

Le fichier image contenant la flèche de retour :

Le fichier image contenant la flèche en avant :

Le layout de la question 1 de l'exercice 7

Une activité permettant l'affichage du layout de la question 1 de l'exercice 7

Les ressources associées à l'exercice 7

Le layout de la question 1 de l'exercice 8

Une activité permettant l'affichage du layout de la question 1 de l'exercice 8

Les ressources associées à l'exercice 8

Elements de correction : NFA025_2018_ED3

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2018_ED3/Files.jar (37 Ko)

Exercice 9
On reprend la correction de l'exercice HoloWorld de la série précédente.
Question 1
Cf. capture d'écran.
Question 2
Une solution possible est donnée dans le fichier holo_set.xml
Exercice 10
Cet exercice poursuit la correction de l'application guide touristique débutée dans la série d'exercices précédents. Il y a évidemment plusieurs solutions acceptables pour produire une mise en page de l'interface. Le fichier main_guide.xml propose une de ces solutions.
Exercice 11
On reprend l'exercice Trousse à Outils de la série précédente.
Question 1
Exécuter le programme pour découvrir l'interface. cf . capture d'écran.
Le fichier trousse.xml a été modifié en conséquence et les ressources ajoutées au fichier res/strings.xml
Question 2
Question 3
La classe NiveauABulleVue étend la classe View du système Android. Elle réécrit la méthode onDraw(Canvas). Cette méthode est appelée par le système chaque fois que la vue doit être redessinée à l'écran. C'est donc le système android qui appelle cette méthode et qui fournit l'outil Canvas à travers lequel le développeur va envoyer des commandes de dessin au système.
Exercice 12
On complète l'exercice « Remise en Forme » de la série d'exercices précédente.
Question 1
Le fichier main_forme.xml permet produire l'interface à l'écran. cf capture d'écran.
Question 2
Les informations codées en dur dans l'énoncé ont été modifiées dans le fichier source. Et les ressources ajoutées dans le fichier res/strings.xml.
Exercice 13
On reprend l'exercice «Service de musique en ligne» de la série d'exercices précédente.
Cf. capture d'écran.
NFA025_2018_ED3}: Screen1
NFA025_2018_ED3}: Screen2
NFA025_2018_ED3}: Screen3
NFA025_2018_ED3}: Screen4
NFA025_2018_ED3}: Screen5
NFA025_2018_ED3}: Screen6
NFA025_2018_ED3}: Screen7
Object
Context
Outils
View
ContextWrapper
NiveauBulleVue
ContextThemeWrapper
Activity
MusicController
NiveauABulle
MenuGuide
Menu
Trousse
HoloWorld
HoloSettings
./AndroidManifest.xml
res/drawable/default_artwork.png
res/drawable/logo.png
res/layout/controller.xml
res/layout/holo.xml
res/layout/holo_set.xml
res/layout/main_forme.xml
res/layout/main_guide.xml
res/layout/niveau_a_bulle.xml
res/layout/trousse.xml
res/values/strings.xml
src/fr/cnam/nfa025/ed3/part2/NiveauBulleVue.java
src/fr/cnam/nfa025/ed3/part2/Trousse.java
src/fr/cnam/nfa025/ed3/part2/Outils.java
src/fr/cnam/nfa025/ed3/part2/MusicController.java
src/fr/cnam/nfa025/ed3/part2/Menu.java
src/fr/cnam/nfa025/ed3/part2/HoloWorld.java
src/fr/cnam/nfa025/ed3/part2/NiveauABulle.java
src/fr/cnam/nfa025/ed3/part2/HoloSettings.java
src/fr/cnam/nfa025/ed3/part2/MenuGuide.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

drawable android

drawable android
layout android

layout android

layout android

layout android

layout android

layout android

layout android

values android

source code NiveauBulleVue.java

source code Trousse.java

source code Outils.java

source code MusicController.java

source code Menu.java

source code HoloWorld.java

source code NiveauABulle.java

source code HoloSettings.java

source code MenuGuide.java

Éléments de correction de l'ED4
Elements de correction : NFA025_2016_ED4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED4/Files.jar (314 Ko)

L'essentiel des exercices de cette série porte sur l'utilisation des intents dans le système Android afin d'orchestrer les différents composants applicatifs sur un terminal mobile. Une bonne part de la mise en œuvre des intents porte donc sur le démarrage du seul composant applicatif que nous connaissons à ce stade : les activités. On verra donc a de nombreuse reprise la mise en œuvre des appels systèmes startActivity() et startActivityForResult(). Mais les intents ne servent pas qu'à cela, nous le découvrirons à l'occasion d'autres exercices plus tard dans d'autres séries.

Exercice 1
Pas de difficultés majeures ici.
L'affichage de messages dans une nouvelle activité est assez simple. Il faut cependant bien comprendre l'enchainement des appels permettant de réaliser cette opération. La gestion du clique sur le bouton aboutit à l'exécution de la méthode displayMessage(), qui crée un intent explicite désignant la classe DisplayMessage pour lancer une nouvelle activité. Ona joute dans la partie extra de l'intent une chaîne de caractère représentant le message à afficher (le contenu du champ de texte éditable) et on demande au système de lancer l'activité avec un startActivity().
Exercice 2
Un exercice assez classique depuis quelques années qui montre comment à partir dune simple activité et du mécanisme des intents, il est possible de réaliser une application assez complexe en jouant les chefs d'orchestre utilisant les composants applicatifs mis à disposition par le système ou d'autres applications.
Exercice 3
Encore un classique !
Cette fois-ci on donne 2 réponses, une similaire à celle de l'année dernière et une seconde plus complexe. Dans les deux cas cependant, on va plus loin que ce qui vous est demandé et ce qui vous sera demandé à l'examen. C'est plus une illustration assez complexe de ce que l'on peut faire lorsqu'on utilise le mécanisme des intents et quelques widgets Andorid.
Exercice 4
En reprenant l'idée du jeu de l'ED3, on ajoute la gestion du pseudo du joueur à l'aide d'une activité dédiée démarrer par un startActivityForResult()
Exercice 5
L'idée est ici la même que pour l'exercice précédent.
Exercice 6
On donne ici une réponse simplifiée...
Question 1
Pour la gestion du clic utilisateur, on utilisera classiquement un attribut android:onClick. Puis on définira la méthode correspondante dans la classe de l'activité ChasseAuTresor.

Dans cette méthode, nous utiliserons un appel de type startActivity en utilisant un intent explicite pour désigner l'activité Fouille

Question 2
On reprend le même mécanisme mais cette fois-ci l'activité sera lancée en utilisant un startActivityForResult. On associera le lancement de l'activité Fouille au numéro 1 que l'on définira dans une constante.

Lorsque l'activité Fouille s'exécutera, l'utilisateur collectera une série d'objets et à la fin de la fouille, il faut retourner cette liste d'objets. Pour ce faire l'activité construit un intent de résultat et stock dans la partie extras de l'intent les données des objets collectés (ici on va supposer qu'il s'agit de noms). Elle va ensuite positionner le résultat avec un appel à la méthode setResult et terminer son exécution avec un appel à la méthode finish.

L'activité ChasseAuTresor va alors reprendre la main et sa méthode onActivityResult va être appelée pour traiter le résultat.

Exercice 7
Une fois encore, on donne une réponse simplifiée, qui se focalise uniquement sur les question de communication entre les activités et la gestion du cycle de vie.
NFA025_2016_ED4}: Screen1
NFA025_2016_ED4}: Screen2
NFA025_2016_ED4}: Screen3
NFA025_2016_ED4}: Screen4
NFA025_2016_ED4}: Screen5
NFA025_2016_ED4}: Screen6
NFA025_2016_ED4}: Screen7
NFA025_2016_ED4}: Screen8
NFA025_2016_ED4}: Screen9
NFA025_2016_ED4}: Screen10
NFA025_2016_ED4}: Screen11
NFA025_2016_ED4}: Screen12
NFA025_2016_ED4}: Screen13
NFA025_2016_ED4}: Screen14
Object
Context
fr.cnam.nfa025.ed4.ChasseAuTresor$1
fr.cnam.nfa025.ed4.Reglages$1
Filter
BaseAdapter
fr.cnam.nfa025.ed4.Reglages2$2
fr.cnam.nfa025.ed4.Reglages2$3
fr.cnam.nfa025.ed4.Reglages2$4
ContextWrapper
PasDeFiltre
ArrayAdapter
ContextThemeWrapper
fr.cnam.nfa025.ed4.Reglages2$1
Activity
Afficheur
Afficheur2
ChasseAuTresor
DisplayActivity
ED4_Ex1
Fouille
IntentTest
Jeu
Judo
MenuPrincipal
MonJeu
MonJeuProfil
Reglages
Reglages2
SaisieInfoClub
OnClickListener
Constantes
OnSeekBarChangeListener
OnItemSelectedListener
TextWatcher
AndroidManifest.xml
src/fr/cnam/nfa025/ed4/Afficheur.java
src/fr/cnam/nfa025/ed4/Afficheur2.java
src/fr/cnam/nfa025/ed4/ChasseAuTresor.java
src/fr/cnam/nfa025/ed4/Constantes.java
src/fr/cnam/nfa025/ed4/DisplayActivity.java
src/fr/cnam/nfa025/ed4/ED4_Ex1.java
src/fr/cnam/nfa025/ed4/Fouille.java
src/fr/cnam/nfa025/ed4/IntentTest.java
src/fr/cnam/nfa025/ed4/Jeu.java
src/fr/cnam/nfa025/ed4/Judo.java
src/fr/cnam/nfa025/ed4/MenuPrincipal.java
src/fr/cnam/nfa025/ed4/MonJeu.java
src/fr/cnam/nfa025/ed4/MonJeuProfil.java
src/fr/cnam/nfa025/ed4/Reglages.java
src/fr/cnam/nfa025/ed4/Reglages2.java
src/fr/cnam/nfa025/ed4/SaisieInfoClub.java
res/drawable/back.png
res/drawable/hp_wand.png
res/drawable/iconemenu.png
res/drawable/logo_cnam.png
res/drawable/projectile1.png
res/layout/affichage.xml
res/layout/chasse.xml
res/layout/composante.xml
res/layout/composante2.xml
res/layout/ed4_ex1_disp.xml
res/layout/ed4_ex1_main.xml
res/layout/ed4_ex4_1.xml
res/layout/ed4_ex4_2.xml
res/layout/fouille.xml
res/layout/intent_test.xml
res/layout/lancer.xml
res/layout/prepare.xml
res/layout/principal.xml
res/layout/reglages.xml
res/layout/reglages2.xml
res/layout/saisie_info_club.xml
res/layout-land/reglages2.xml
res/values/ed4_ex4_strings.xml
res/values/ed4_ex6.xml
res/values/ex5_str.xml
res/values/Exo1_strings.xml
res/values/intentTest.xml
res/values/launch_game.xml
res/values/panneau_str.xml
res/values/tailleMenuRsrc.xml
res/values-fr/strings.xml

 Tous les fichiers  Masquer les fichiers 

















































Éléments de correction de l'ED5
Elements de correction : NFA025_2016_ED5

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED5/Files.jar (34 Ko)

Exercice 1
Ces exercices permettent de vous familiariser avec les notions de concurrence et en particulier les Thread et le UIThread.

La première version de l'activité horloge utilise l'intervention de l'utilisateur pour mettre à jour l'horloge. LE calcul de la nouvelle date et son affichage est réalisée dans la réaction de l'activité Horloge simple.

Exercice 2
Un exercice assez complexe permettant de gérer les combats en tâche de fond.
Exercice 3
La solution va un peu plus loin que les questions de l'ED en permettant de créer 10 billes. qui évoluent simultanément.
NFA025_2016_ED5}: Screen1
NFA025_2016_ED5}: Screen2
NFA025_2016_ED5}: Screen3
NFA025_2016_ED5}: Screen4
NFA025_2016_ED5}: Screen5
NFA025_2016_ED5}: Screen6
NFA025_2016_ED5}: Screen7
NFA025_2016_ED5}: Screen8
NFA025_2016_ED5}: Screen9
NFA025_2016_ED5}: Screen10
Object
fr.cnam.nfa025.ed5.ActiviteBille$1
Context
fr.cnam.nfa025.ed5.ActiviteCombatLive$1
fr.cnam.nfa025.ed5.ActiviteCombatLive$2
fr.cnam.nfa025.ed5.ActiviteCombatLive$3
fr.cnam.nfa025.ed5.ActiviteHorloge$1
Handler
Thread
TimerTask
Arme
Bille
BroadcastReceiver
De
DuelImpl
LCLog
MesResultats
Personnage
View
ContextWrapper
fr.cnam.nfa025.ed5.ActiviteHorlogeThread$1
fr.cnam.nfa025.ed5.ActiviteHorlogeTimer$1
fr.cnam.nfa025.ed5.DownloadServiceWiFiOnlyActivity$1
fr.cnam.nfa025.ed5.ActiviteHorlogeThread$2
Arene
DownloaderThread
fr.cnam.nfa025.ed5.ActiviteHorlogeTimer$2
ConnectivitySupervisor
Soldat
VueBille
ContextThemeWrapper
Service
Activity
DownloadServiceWiFiOnly
ActiviteBille
ActiviteCombatLive
ActiviteHorloge
ActiviteHorlogeThread
ActiviteHorlogeTimer
ClickHorloge
DownloadServiceWiFiOnlyActivity
Runnable
Serializable
OnClickListener
Combattant
Constantes
Duel
ResultatAttaque
AndroidManifest.xml
src/fr/cnam/nfa025/ed5/ActiviteBille.java
src/fr/cnam/nfa025/ed5/ActiviteCombatLive.java
src/fr/cnam/nfa025/ed5/ActiviteHorloge.java
src/fr/cnam/nfa025/ed5/ActiviteHorlogeThread.java
src/fr/cnam/nfa025/ed5/ActiviteHorlogeTimer.java
src/fr/cnam/nfa025/ed5/Arene.java
src/fr/cnam/nfa025/ed5/Arme.java
src/fr/cnam/nfa025/ed5/Bille.java
src/fr/cnam/nfa025/ed5/ClickHorloge.java
src/fr/cnam/nfa025/ed5/Combattant.java
src/fr/cnam/nfa025/ed5/ConnectivitySupervisor.java
src/fr/cnam/nfa025/ed5/Constantes.java
src/fr/cnam/nfa025/ed5/De.java
src/fr/cnam/nfa025/ed5/DownloadServiceWiFiOnly.java
src/fr/cnam/nfa025/ed5/DownloadServiceWiFiOnlyActivity.java
src/fr/cnam/nfa025/ed5/Duel.java
src/fr/cnam/nfa025/ed5/LCLog.java
src/fr/cnam/nfa025/ed5/Personnage.java
src/fr/cnam/nfa025/ed5/ResultatAttaque.java
src/fr/cnam/nfa025/ed5/Soldat.java
src/fr/cnam/nfa025/ed5/VueBille.java
res/layout/bille.xml
res/layout/dwl_controller.xml
res/layout/ex2_main.xml
res/layout/horloge.xml
res/layout-land/dwl_controller.xml
res/values/bille_str.xml
res/values/dimens.xml
res/values/dwl_str.xml
res/values/ex2_strings.xml
res/values/strings.xml
res/values-fr/dwl.xml

 Tous les fichiers  Masquer les fichiers 


































Éléments de correction de l'ED6
Elements de correction : NFA025_2016_ED6

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED6/Files.jar (162 Ko)

Les corrections sont incomplètes, faute de temps pour les rédiger correctement. Une mise à jour plus complète sera mise en ligne très bientôt.
Exercice 1
La solution donnée est assez simple.
Cependant, on utilise dans ce premier exemple du code permettant de mettre en œuvre la géolocalisation pour enregistrer des données de trajectoire. Un exemple plus complet sera donné ultérieurement.
De plus, une implantation correcte de la base de données devrait nécessiter de créer des accesseurs pour chaque champ de la classe Position.
Exercice 2
Idem pour et exercice qui n'intègre pas complètement la gestion de la découverte de sort etc...
Exercice 3
Cet exercice est un peu plus complet que les exercices précédents et gère les principales fonctionnalités du gestionnaire de BD. En outre cet exemple illustre l'utilisation d'un gestionnaire de BD (sous classe de SQLiteOpenHelper) partagé entre plusieurs activités.
NFA025_2016_ED6}: Screen1
Object
Context
Club
SQLiteOpenHelper
fr.cnam.nfa025.ed6.JeuDeDonnees$1
Judoka
fr.cnam.nfa025.ed6.JudokaListActivity$1
Outils
Position
ProfilData
Sortileges
ContextWrapper
DBJeu
DBTrajectoire
DonneesJudo
ContextThemeWrapper
Activity
AddJudokaActivite
JeuDeDonnees
JudokaListActivity
Profil
SaisieInfoClub
Trajectoires
OnItemSelectedListener
SensorEventListener
OnItemClickListener
LocationListener
AndroidManifest.xml
src/fr/cnam/nfa025/ed6/AddJudokaActivite.java
src/fr/cnam/nfa025/ed6/DBJeu.java
src/fr/cnam/nfa025/ed6/DBTrajectoire.java
src/fr/cnam/nfa025/ed6/DonneesJudo.java
src/fr/cnam/nfa025/ed6/JeuDeDonnees.java
src/fr/cnam/nfa025/ed6/JudokaListActivity.java
src/fr/cnam/nfa025/ed6/Outils.java
src/fr/cnam/nfa025/ed6/Profil.java
src/fr/cnam/nfa025/ed6/SaisieInfoClub.java
src/fr/cnam/nfa025/ed6/Trajectoires.java
res/drawable/hp_wand.png
res/layout/add_judoka.xml
res/layout/ed6_ex1.xml
res/layout/ed6_ex2.xml
res/layout/ed6_ex2_profil.xml
res/layout/judo_list.xml
res/layout/saisie_info_club.xml
res/values/ed6_ex2_strings.xml
res/values/judo_str.xml
res/values/strings.xml
assets/fonts/harryp.TTF
assets/fonts/hogwartswizard.TTF
assets/fonts/parryhotter.ttf

 Tous les fichiers  Masquer les fichiers 























Notice: Undefined index: 4 in /mnt/133/sdb/d/9/jeanferdysusini/jfs_php_utilities.inc on line 240


Notice: Undefined index: 4 in /mnt/133/sdb/d/9/jeanferdysusini/jfs_php_utilities.inc on line 240


Notice: Undefined index: 4 in /mnt/133/sdb/d/9/jeanferdysusini/jfs_php_utilities.inc on line 240

Éléments de correction de l'ED7
Elements de correction : NFA025_2016_ED7

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED7/Files.jar (12 Ko)

Exercice 1
La solution proposée ici va plus loin que ce qui était demandé à l'examen. En particulier au niveau graphiques qui vous donne un autre exemple de la mise en œuvre de la méthode onDraw() et de l'objet Canvas. Ce qui reste important ici est la mise en œuvre des capteurs.
Exercice 2
L'activité Magnetometre met en œuvre le capteur idoine et permet de détecter des variation du champ magnétique, le seuil de déclenchement est peut-être un peu trop haut (il a été paramétré pour un téléphone dont le magnétomètre était assez peu sensible).
Exercice 3
Le chronomètre utilise l'API standard de java java.lang.System.currentTimeMillis(). Cette méthode retourne une valeur entière de type long représentant le nombre millisecondes écoulées depuis le 1 janvier 1970 à 0h. On peut donc en déduire assez facilement le nombre de secondes écoulées.

La mise en œuvre du détecteur de proximité est assez classique. Par contre un bon nombre de téléphone ne donne pas réellement de mesure de distance. Mais donne une valeur à 0 en dessous d'un certains seuil et une valeurs de plusieurs centimètres (décorrélée de la distance réelle) au dessus de ce seuil.

Exercice 4
LA mise en œuvre du service de localisation ici repose sur l'utilisation du provider GPS qui implique de demander l'autorisation FINE_LOCATION. D'autres solutions aurait pue être proposées (Dans le principe la solution reposerait sur les même principes).
NFA025_2016_ED7}: Screen1
NFA025_2016_ED7}: Screen2
NFA025_2016_ED7}: Screen3
NFA025_2016_ED7}: Screen4
NFA025_2016_ED7}: Screen5
NFA025_2016_ED7}: Screen6
Object
fr.cnam.nfa025.ed7.ActiviteOuSuisJe$1
Context
DetecteurDeSecousse
fr.cnam.nfa025.ed7.LaBoussoleSimple$1
fr.cnam.nfa025.ed7.LaBoussoleSimple$2
View
ContextWrapper
fr.cnam.nfa025.ed7.LaBoussoleSimple$3
ContextThemeWrapper
Activity
ActiviteOuSuisJe
ActivitePtitsMessagesSecoues
LaBoussoleSimple
LocationListener
SensorEventListener
AndroidManifest.xml
src/fr/cnam/nfa025/ed7/ActiviteOuSuisJe.java
src/fr/cnam/nfa025/ed7/ActivitePtitsMessagesSecoues.java
src/fr/cnam/nfa025/ed7/LaBoussoleSimple.java
res/layout/ex2_main.xml
res/layout/ex3_main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 








Corrections faites en classe

Éléments de correction de l'exercice combat dans l'arène en Java standard

Éléments de correction de l'exercice 1 ED-2
Elements de correction : NFA025_2019_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED2/Files.jar (2 Ko)

Object
Context
ContextWrapper
ContextThemeWrapper
Activity
ED2
AndroidManifest.xml
src/fr/cnam/nfa025/ED2/ED2.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 





Éléments de correction de l'exercice 4 ED-2
Elements de correction : NFA025_2019_ED2_4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED2_4/Files.jar (5 Ko)

Object
Personnage
Utilitaire
Arene
De
Context
Arme
PersonnageArme
ContextWrapper
ContextThemeWrapper
Activity
ActiviteCombat
AndroidManifest.xml
src/fr/cnam/nfa025/ed2/combat/Arene.java
src/fr/cnam/nfa025/ed2/combat/Utilitaire.java
src/fr/cnam/nfa025/ed2/combat/ActiviteCombat.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 







Éléments de correction de l'exercice 4 ED-2 version 2
Elements de correction : NFA025_2019_ED2_v2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED2_v2/Files.jar (5 Ko)

Object
fr.cnam.nfa025.ed2.combat.Arene$1
Personnage
fr.cnam.nfa025.ed2.combat.Arene$2
Utilitaire
Arene
De
Context
Arme
PersonnageArme
ContextWrapper
ContextThemeWrapper
Activity
ActiviteCombat
PersonnageData
ArmeData
AndroidManifest.xml
src/fr/cnam/nfa025/ed2/combat/Arene.java
src/fr/cnam/nfa025/ed2/combat/Utilitaire.java
src/fr/cnam/nfa025/ed2/combat/ActiviteCombat.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 







Éléments de correction de l'exercice 7 ED-3
Elements de correction : NFA025_2019_ED3_ex7

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED3_ex7/Files.jar (2 Ko)

Object
Context
ContextWrapper
ContextThemeWrapper
Activity
MainActivity
AndroidManifest.xml
src/fr/cnam/nfa025/ED3/tresor/MainActivity.java
res/layout/main.xml
res/values/resssources.xml

 Tous les fichiers  Masquer les fichiers 





Éléments de correction de l'exercice 9 ED-3
Elements de correction : NFA025_2019_ED3_ex9

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED3_ex9/Files.jar (10 Ko)

Object
Context
ContextWrapper
ContextThemeWrapper
Activity
HoloWorld
AndroidManifest.xml
src/fr/cnam/nfa025/ed2/hologramme/HoloWorld.java
res/drawable/logo_cnam.png
res/layout/main.xml
res/layout/main_rl.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 







Éléments de correction de l'exercice 2 ED-4
Elements de correction : NFA025_2019_ED4_ex2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED4_ex2/Files.jar (11 Ko)

Object
Context
Util
ContextWrapper
ContextThemeWrapper
Activity
ChefDOrchestre
AndroidManifest.xml
src/fr/cnam/nfa025/ed4/Util.java
src/fr/cnam/nfa025/ed4/ChefDOrchestre.java
res/drawable/logo_cnam.png
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 







Éléments de correction de l'exercice 1 ED-5
Elements de correction : NFA025_2019_ED5_horloge

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED5_horloge/Files.jar (3 Ko)

Object
fr.cnam.nfa025.ed5_1.Horloges$1
Context
RafraichirAffichage
Util
Thread
ContextWrapper
MonThread
ContextThemeWrapper
Activity
Horloges
Runnable
AndroidManifest.xml
src/fr/cnam/nfa025/ed5_1/Horloges.java
src/fr/cnam/nfa025/ed5_1/Util.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 






Éléments de correction de l'exercice 3 ED-5
Elements de correction : NFA025_2019_ED5_bille

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED5_bille/Files.jar (3 Ko)

Object
Context
Thread
View
Handler
ContextWrapper
MonAnimation
MaVue
fr.cnam.nfa025.ed5_2.MaVue$1
ContextThemeWrapper
Activity
MainActivity
AndroidManifest.xml
src/fr/cnam/nfa025/ed5_2/MaVue.java
src/fr/cnam/nfa025/ed5_2/MainActivity.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 






Éléments de correction de l'exercice 4 ED-5
Elements de correction : NFA025_2019_ED5_ex4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED5_ex4/Files.jar (12 Ko)

Object
Thread
Context
Handler
Utils
fr.cnam.nfa025.ed5.ex4.ImageService$1
ContextWrapper
MyHandler
Service
ContextThemeWrapper
ImageService
Activity
ImageViewer
AndroidManifest.xml
src/fr/cnam/nfa025/ed5/ex4/ImageViewer.java
src/fr/cnam/nfa025/ed5/ex4/Utils.java
src/fr/cnam/nfa025/ed5/ex4/ImageService.java
res/drawable/main_image_initiale.png
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 









NFA024 : Principes et programmation système et réseau pour smart-phones et tablettes tactiles

Support de cours et liens utiles

Éléments de correction des TPs

Éléments de correction du TP1 : illustration du cycle de vie
Elements de correction : NFA024_2018_TP1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2018_TP1/Files.jar (4 Ko)

Object
Context
Util
ContextWrapper
ContextThemeWrapper
Activity
FirstTest
./AndroidManifest.xml
res/layout/main.xml
res/layout/main_1.xml
res/values/strings.xml
res/values-fr/strings.xml
res/values-land/strings.xml
src/fr/cnam/nfa024/tp1/Util.java
src/fr/cnam/nfa024/tp1/FirstTest.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

layout android

layout android

values android

values android

values android

source code Util.java

source code FirstTest.java

Éléments de correction du TP2 : la calulatrice
Elements de correction : NFA024_2016_TP2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2016_TP2/Files.jar (16 Ko)

Attention pour répondre aux exercices de ce TP nous allons nous appuyer sur une caractéristique du système Android dont il ne faut pas trop abuser : nous allons gérer nos trois activités comme une et une seule application présentant 3 points d'entrée principaux dans son manifeste. Pour l'utilisateur, cela apparaitra comme 3 applications dans le lanceur d'application. Ceci est un « détournement » d'un mécanisme standard d'Android.

Pour cela il faut se référer aux cours sur les « Intents » de NFA025. Dans le AndroidManifest.xml, quand on déclare une activité, on va rajouter un « intent-filter » particulier sur l'activité qui va servir de point d'entrée de l'application (c'est-à-dire l'activité pour laquelle une icône sera placée dans le lanceur d'application Android). La déclaration xml correspond à peu près au code suivant :



    
        
        
    

Dans cette solution, nous déclarons une activité par exercice dans le même manifest, ce qui nous conduit à créer 3 points d'entrée.

Exercice 1

L'implantation est assez directe, l'interface est décrite avec un LinearLayout. Ce premier exemple montre comment est gérer une interaction utilisateur simple (à l'aide du android:onClick)

Exercice 2

Le second exercice va un peu plus loin en proposant une interface graphique plus complexe dans le dossier ex2.xml et une interaction où l'on va discriminer le bouton cliqué par un identifiant. Les identifiants sont créés par le processus de compilation en analysant dans les fichiers les layouts de type @+id/nom_de_l_identifiant.

Remarques :
  • De nombreux « tutos » sur internet vous conseillent de toujours manipuler vos identifiants dans les ressources XML toujours sous la forme @+id/nom_de_l_identifiant. Ce n'est pas forcément une bonne idée ! Certes vous n'avez plus à vous préoccuper de savoir si l'identifiant existe ou pas. Mais d'un autre côté vous perdez une capacité du processus de compilation à vérifier la correction des références aux identifiants. Je vous conseille donc d'utiliser la notation @+id/nom_de_l_identifiant la première fois que vous manipuler l'identifiant. Puuis d'utiliser la notation @id/nom_de_l_identifiant (c.a.d sans le symbol +) pour référencer cet identifiant. Ainsi, si vous vous trompé dans le nom de l'identifiant, le compilateur pourra vous signaler le problème.
  • Je vous conseille également d'adopter rapidement une convention pour le nommage de vos identifiants et de vous y tenir. Personnellement, je propose la nomenclature suivante :
    • n'utiliser que des lettres minuscules, le symbole underscore '_', et les chiffres (mais jamais en premier caractère)
    • la première partie reprend le nom du layout dans lequel l'identifiant est défini. Par exemple, dans main.xml les identifiants commenceront par main_.
    • ensuite donner un nom significatif pour l'objet en question.
    • enfin donner un suffixe rappelant le type de l'objet par exemple '_btn' ou '_et'
    L'intérêt est de pouvoir se rappeler facilement dans le code Java l'origine de l'identifiant et le type de l'objet. Une utilisation importante de ces identifiants est de permettre de retrouver une référence vers l'objet java implantant l'objet d'interface. Dans le code Java cela se fait grâce à la méthode findViewById(int). Or cette méthode retourne une référence de type View. Si cette classe est la racine de tous les widgets Android, on a généralement besoin de « caster » (forcer la prise en compte d'un type plus spécialisé) la valeur de retour en une sous classe de la classe View. Par exemple pour un bouton (classe Button) on écrira : (Button)findViewById(R.id.main_valid_btn). La nomenclature ici ('_btn') permet de se rappeler que le type d'objet est la classe Button.
Exercice 3

La difficulté principale de cet exercice provient de la définition de la même interface avec des « layouts » différents. Les fichier main.xml, main_ll.xml et main_rl.xml contiennent les 3 définitions. Une seule sera active à la fois.

Une autre difficulté importante réside dans la définition de la « logique » de l'application. Dans la proposition d'exercice, on utilise plusieurs méthodes pour gérer l'interaction utilisateur. Ces méthodes permettent de factoriser (écrire un seul code pour gérer le même type de comportement), le comportement de certains boutons. Par exemple, la méthode toucheChiffre() permettra de gérer la saisie de chaque chiffre. La méthode opération permettra de factoriser le comportement de l'appui sur les touches d'opération…

L'idée pour la construction des nombre est de cumuler les chiffres jusqu'à ce qu'une opération ait lieu et de mémoriser le dernier chiffre construit pour calculer.

NFA024_2016_TP2}: Screen1
NFA024_2016_TP2}: Screen2
NFA024_2016_TP2}: Screen3
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
AfficheNombre
Calculatrice
SimpleCalc
AndroidManifest.xml
res/layout/ex1.xml
res/layout/ex2.xml
res/layout/main_ll.xml
res/layout/main_rl.xml
res/layout/main.xml
res/values/colors.xml
res/values/strings.xml
src/fr/cnam/nfa024/calculatrice/AfficheNombre.java
src/fr/cnam/nfa024/calculatrice/SimpleCalc.java
src/fr/cnam/nfa024/calculatrice/Calculatrice.java

 Tous les fichiers  Masquer les fichiers 

Le fichier manifest android commence par déclarer 3 activités.

La description statique de l'interface graphique de la première activité (AfficheNombre) :

La description statique de l'interface graphique de la deuxième activité (SimpleCalc) :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de LinearLayout :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de RelativeLayout :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de TableLayout :

Le fichier couleur contenant la déclaration de couleurs en format RGB :

Enfin la liste des chaînes de caractères

L'activité AfficheNombre

L'activité SimpleCalc

L'activité Calculatrice

Éléments de correction du TP3 : dessins de formes
Elements de correction : NFA024_2014_TPLivingForms

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2014_TPLivingForms/Files.jar (5 Ko)

Living Forms part 1 :
On apprend à dessiner dans une vue.

Dans un premier temps, on apprend à créer une nouvelle classe de vue personnalisée capable de dessiner une forme simple dans sa zone d'affichage à l'écran. On apprend à positionner cette vue dans un layout, et on apprend à gérer son affichage.

NFA024_2014_TPLivingForms}: Screen1
NFA024_2014_TPLivingForms}: Screen2
Object
fr.cnam.nfa024.livingforms.ActiviteFormeGeometriquesStatiques$1
Context
GeoForm
View
ContextWrapper
RectGeoForm
PathGeoForm
GeoView
ContextThemeWrapper
Circle
Rectangle
RoundRectangle
Star
Triangle
Activity
ActiviteFormeGeometriquesStatiques
OnTouchListener
AndroidManifest.xml
res/layout/main.xml
res/values/strings.xml
src/fr/cnam/nfa024/livingforms/ActiviteFormeGeometriquesStatiques.java
src/fr/cnam/nfa024/livingforms/GeoView.java
src/fr/cnam/nfa024/livingforms/GeoForm.java
src/fr/cnam/nfa024/livingforms/RectGeoForm.java
src/fr/cnam/nfa024/livingforms/Rectangle.java
src/fr/cnam/nfa024/livingforms/RoundRectangle.java
src/fr/cnam/nfa024/livingforms/Circle.java
src/fr/cnam/nfa024/livingforms/PathGeoForm.java
src/fr/cnam/nfa024/livingforms/Triangle.java
src/fr/cnam/nfa024/livingforms/Star.java

 Tous les fichiers  Masquer les fichiers 

Le fichier Manifest de l'application décrit trois activités qui peuvent être lancées séparéments :

L'interface statique de l'activité en XML

Les chaînes de carctères de l'application

L'activité principale (on a simplifié l'interface).

La sous classe de View affichant les formes géométriques

La classe abstraite définissant les formes géométriques

On sous classe GeoForm en 2 sous catégories abstraites
La classe abstraite définissant les formes géométriques basée sur des Rectangles (3 sous classes concrètes)

La classe Rectangle

La classe RoundRectangle

La classe Circle

La classe abstraite définissant les formes géométriques basée sur des Chemins (2 sous classes concrètes)

La classe Triangle

La classe Star

Elements de correction : NFA024_2016_TP3

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2016_TP3/Files.jar (30 Ko)

Attention pour répondre aux exercices de ce TP nous allons nous appuyer sur une caractéristique du système Android dont il ne faut pas trop abuser : nous allons gérer nos trois activités comme une et une seule application présentant 3 points d'entrée principaux dans son manifeste. Pour l'utilisateur, cela apparaitra comme 3 applications dans le lanceur d'application. Ceci est un « détournement » d'un mécanisme standard d'Android.

Pour cela il faut se référer aux cours sur les « Intents » de NFA025. Dans le AndroidManifest.xml, quand on déclare une activité, on va rajouter un « intent-filter » particulier sur l'activité qui va servir de point d'entrée de l'application (c'est-à-dire l'activité pour laquelle une icône sera placée dans le lanceur d'application Android).

Dans ces éléments de solution, nous déclarons une activité par question dans le même manifest. Mais dans ce TP nous allons proposer des exemples allant bien au delà des énoncés afin d'illustrer différents mécanismes d'Android.

Exercice 1
Plusieurs activités correspondent au réponses de cet exercice :
  • L'activité ActiviteWithXMLShapes montre comment dessiner des formes géométriques dans une vue à partir d'objet XML shape d'Android. Cela permet de définir des dessins adaptable grace au système de gestion des ressources d'Android. On peut envisager de modifier les formes en fonction de la langue utilisé sur le terminal, de l'orientation portrait-paysage, etc.
  • L'activité ActiviteWithXMLShapesSaved est une extension de l'activité précédente qui réalise la sauvegarde des formes créées par l'utilisateur dans le Bundle de l'application. La prise en charge des deux méthode onSaveInstanceState() et onRestoreInstanceState() de l'activité permet de mieux gérer le comportement de l'application lorsque par exemple on bascule l'interface du mode portrait au mode paysage. Comparez le comportement de cet activité et de la précédente dans le cas d'un basculement de l'orientation de l'interface.
  • Les deux activités précédentes ne répondent pas vraiment à la question posée mais vous montre un mécanisme puissant d'android qui permet de répondre au moins partiellement à la question posée. Il faut savoir qu'à partir de la version 5 d'android un mécanisme d'éléments graphique plus riche que les objets XML shapes a été introduit et permet d'aller plus loin. Je n'illustre pas ce cas ici. L'activité ActiviteFormesGeometriquesStatiques elle est une réponse plus précise à la question 1 du TP et utilise directement la notion de dessin dans une vue.
  • L'activité ActiviteSpinner permet de répondre à la question 2.
  • Tandis que l'activité ActiviteSpinnerReglages permet de répondre partiellement à la question 3 (je ne fourni pas ici une réponse complète et je vous laisse voir comment étendre cette solution pour répondre complètement à la question).
  • Les activités suivantes sont des variantes permettant d'illustrer d'autres mécanismes. Ainsi, l'activité ActiviteFormesGeometriquesStatiquesMouvements illustre l'utilisation d'une gestuelle très simple à un doigt sur l'écran pour créer différents types de formes. Ainsi l'utilisateur commence par toucher un point de l'écran sur lequel sera centrée la forme à dessiner. Puis en glissant sont doigt pour dessiner un segment de droite à partir de se point et en levant son doigt, l'utilisateur choisira une forme à dessiner en fonction de la direction du segment de droite.
  • L'activité ActiviteLivingForms se construit sur l'activité précédente en proposant également un petit moteur d'animation construit sur une Thread s'exécutant en parallèle du UIThread et calculant des mise à jour régulière de l'état de la forme dessinée (couleur, taille du trait, angle d'arrondi des rectangles arrondis, rotation de figures construites sur des chemins, etc.)
Object
Context
fr.cnam.nfa024.tp3.ActiviteFormesGeometriquesStatiquesMouvements$1
fr.cnam.nfa024.tp3.ActiviteLivingForms$1
Handler
fr.cnam.nfa024.tp3.ActiviteSpinnerReglages$1
fr.cnam.nfa024.tp3.ActiviteSpinnerReglages$2
fr.cnam.nfa024.tp3.ActiviteSpinnerReglages$3
GeoForm
ColorTransform
View
Outils
Power
RotateTransform
ContextWrapper
GraphicHandler
RectGeoForm
PathGeoForm
GeoView
LivingView
SimpleView
ContextThemeWrapper
Circle
Rectangle
RoundRectangle
Star
Triangle
GeoViewReglable
GeoViewRetour
SimpleViewSaved
Activity
ActiviteFormesGeometriquesStatiques
ActiviteSpinner
ActiviteWithXMLShapes
ActiviteFormesGeometriquesStatiquesMouvements
ActiviteSpinnerReglages
ActiviteWithXMLShapesSaved
ActiviteLivingForms
OnTouchListener
SensorEventListener
OnItemSelectedListener
OnClickListener
TextWatcher
OnSeekBarChangeListener
LivingTask
Runnable
AndroidManifest.xml
src/fr/cnam/nfa024/tp3/ActiviteFormesGeometriquesStatiques.java
src/fr/cnam/nfa024/tp3/ActiviteFormesGeometriquesStatiquesMouvements.java
src/fr/cnam/nfa024/tp3/ActiviteLivingForms.java
src/fr/cnam/nfa024/tp3/ActiviteSpinner.java
src/fr/cnam/nfa024/tp3/ActiviteSpinnerReglages.java
src/fr/cnam/nfa024/tp3/ActiviteWithXMLShapes.java
src/fr/cnam/nfa024/tp3/ActiviteWithXMLShapesSaved.java
src/fr/cnam/nfa024/tp3/Circle.java
src/fr/cnam/nfa024/tp3/GeoForm.java
src/fr/cnam/nfa024/tp3/GeoView.java
src/fr/cnam/nfa024/tp3/GeoViewReglable.java
src/fr/cnam/nfa024/tp3/GeoViewRetour.java
src/fr/cnam/nfa024/tp3/LivingView.java
src/fr/cnam/nfa024/tp3/Outils.java
src/fr/cnam/nfa024/tp3/PathGeoForm.java
src/fr/cnam/nfa024/tp3/Power.java
src/fr/cnam/nfa024/tp3/Rectangle.java
src/fr/cnam/nfa024/tp3/RectGeoForm.java
src/fr/cnam/nfa024/tp3/RoundRectangle.java
src/fr/cnam/nfa024/tp3/SimpleView.java
src/fr/cnam/nfa024/tp3/SimpleViewSaved.java
src/fr/cnam/nfa024/tp3/Star.java
src/fr/cnam/nfa024/tp3/Triangle.java
res/drawable/disk.xml
res/drawable/line.xml
res/drawable/rectangle.xml
res/drawable/ring.xml
res/drawable/round_rectangle.xml
res/drawable-land/disk.xml
res/drawable-land/rectangle.xml
res/drawable-land/ring.xml
res/drawable-land/round_rectangle.xml
res/layout/composante.xml
res/layout/living_main.xml
res/layout/main.xml
res/layout/main_saved.xml
res/layout/reglages.xml
res/layout/spinner.xml
res/layout/spinner_reglages.xml
res/layout/static_btn.xml
res/values/colors.xml
res/values/dimens.xml
res/values/strings.xml
res/values-land/dimens.xml

 Tous les fichiers  Masquer les fichiers 














































Elements de correction : NFA024_2018_TP3

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2018_TP3/Files.jar (5 Ko)

Object
View
Context
Animate
Figure
VueFigure
ContextWrapper
Carre
Rond
Triangle
ContextThemeWrapper
RectangleArrondi
Activity
MainActivity
SensorEventListener
Runnable
./AndroidManifest.xml
res/layout/main.xml
res/layout/main_spinner.xml
res/values/strings.xml
src/fr/cnam/nfa024/dessine/VueFigure.java
src/fr/cnam/nfa024/dessine/MainActivity.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

layout android

layout android

values android

source code VueFigure.java

source code MainActivity.java

Éléments de correction du TP4 : boussole
Elements de correction : NFA024_2015_TP4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2015_TP4/Files.jar (6 Ko)

TP 4 : Implantation d'une Boussole simple
On souhaite réaliser une boussole à partir d’un magnétomètre intégré à un système Android.
  1. Expliquez par du code Java comment mettre en place dans une activité la détection du champ magnétique terrestre.
  2. On veut afficher une flèche indiquant la direction du Nord magnétique sur l’écran du téléphone. Pour ce faire, nous allons créer notre propre vue Android et utiliser la méthode onDraw(Canvas canvas) pour afficher la flèche dans la direction voulue.
    Proposez le code correspondant.
  3. Pour utiliser notre application on veut s’assurer que le téléphone est en position proche de l’horizontal, l’écran regardant le ciel. Quelle solution préconisez vous pour vérifier cette condition ?
    Donner le code correspondant.
NFA024_2015_TP4}: Screen1
Object
fr.cnam.nfa024.tp4.LaBoussoleSimple$1
View
fr.cnam.nfa024.tp4.LaBoussoleSimple$2
Context
fr.cnam.nfa024.tp4.LaBoussoleSimple$3
ContextWrapper
ContextThemeWrapper
Activity
LaBoussoleSimple
SensorEventListener
AndroidManifest.xml
src/fr/cnam/nfa024/tp4/LaBoussoleSimple.java
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 




Éléments de correction du TP5 : base de contacts
Elements de correction : NFA024_2014_TPDB

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2014_TPDB/Files.jar (8 Ko)

Une application plus «évoluée»
Construire une activité permettant d'appeler 2 autres activités grâce à 2 boutons :
  • Une activité permet de saisir des informations sur une personne : nom, prénom, email et un bouton permet de valider la saisie pour ajouter la personne dans un base de données.
  • L'autre activité affiche le contenu de la base de donnée dans une ListView.
NFA024_2014_TPDB}: Screen1
NFA024_2014_TPDB}: Screen2
NFA024_2014_TPDB}: Screen3
NFA024_2014_TPDB}: Screen4
Object
Context
SQLiteOpenHelper
Personne
ContextWrapper
DBManager
ContextThemeWrapper
Activity
ActiviteCreerPersonne
ActivitePrincipale
ActiviteVoirTous
AndroidManifest.xml
res/layout/main.xml
res/layout/creerpersonne.xml
res/layout/voirtous.xml
res/values/strings.xml
src/fr/cnam/nfa024/tpdb/ActivitePrincipale.java
src/fr/cnam/nfa024/tpdb/Personne.java
src/fr/cnam/nfa024/tpdb/DBManager.java
src/fr/cnam/nfa024/tpdb/ActiviteCreerPersonne.java
src/fr/cnam/nfa024/tpdb/ActiviteVoirTous.java

 Tous les fichiers  Masquer les fichiers 

Le fichier manifest android commence par déclarer 3 activités (un seul point d'entrée).

La description statique de l'interface graphique de la première activité ActivitePrincipale :

La description statique de l'interface graphique de l'activité ActiviteCreerPersonne :

La description statique de l'interface graphique de l'activité ActiviteVoirTous :

La liste des chaînes de caractères

L'activité ActivitePrincipale

La classe Personne

La classe DBManager qui implante un SQLiteOpenHelper

Le code de l'activité ActiviteCreerPersonne

Le code de l'activité ActiviteVoirTous

Corrections faites en classe

Éléments de correction du TP1 : illustration du cycle de vie
Elements de correction : NFA024_2019_TP1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP1/Files.jar (3 Ko)

NFA024_2019_TP1}: Screen1
NFA024_2019_TP1}: Screen2
NFA024_2019_TP1}: Screen3
NFA024_2019_TP1}: Screen4
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
HelloWorld
AndroidManifest.xml
src/fr/cnam/nfa024/TP1/HelloWorld.java
res/layout/main.xml
res/values/strings.xml
res/values-fr/strings.xml

 Tous les fichiers  Masquer les fichiers 






Éléments de correction du TP2 : la calculatrice
Elements de correction : NFA024_2019_TP2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP2/Files.jar (5 Ko)

NFA024_2019_TP2}: Screen1
NFA024_2019_TP2}: Screen2
NFA024_2019_TP2}: Screen3
NFA024_2019_TP2}: Screen4
NFA024_2019_TP2}: Screen5
NFA024_2019_TP2}: Screen6
NFA024_2019_TP2}: Screen7
java -classpath .:/Users/jfsusini/NetBeansProjects/Calculatrice_2019/bin/classes:/Users/jfsusini/Documents/Dev/Android/android-sdk-macosx/platforms/android-19/android.jar:bcel-5.2.jar jfs.tools.inspector.JavaInspector NFA024_2019_TP2 \ $((cd /Users/jfsusini/NetBeansProjects/Calculatrice_2019/bin/classes; find . -name '*.class'|grep -v 'R\>'|grep -v 'R\$'| grep -v 'BuildConfig') |sed -e 's/^.\///' -e 's/\//\./g' -e 's/\.class//') idSoluce = NFA024_2019_TP2 args.length = 5 initing tree with Object
Object
Context
Utils
ContextWrapper
ContextThemeWrapper
Activity
BasicCalc
Message
Calculatrice
AndroidManifest.xml
src/fr/cnam/nfa024/TP2/Message.java
src/fr/cnam/nfa024/TP2/Calculatrice.java
src/fr/cnam/nfa024/TP2/Utils.java
src/fr/cnam/nfa024/TP2/BasicCalc.java
res/layout/main.xml
res/layout/calc.xml
res/layout/basic_calc.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 










Éléments de correction du TP3 : dessins de formes
Elements de correction : NFA024_2019_TP3

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP3/Files.jar (12 Ko)

Object
FormeGeometrique
Context
View
Cercle
Rectangle
ContextWrapper
MaVue
RectangleArrondis
ContextThemeWrapper
Activity
Dessine
AndroidManifest.xml
src/fr/cnam/nfa024/TP3/MaVue.java
src/fr/cnam/nfa024/TP3/Dessine.java
src/fr/cnam/nfa024/TP3/FormeGeometrique.java
res/drawable/disque.xml
res/drawable/carre.xml
res/drawable/logo_cnam.png
res/layout/main.xml
res/values/colors.xml
res/values/dimens.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 












Elements de correction : NFA024_2019_TP3_anim

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP3_anim/Files.jar (13 Ko)

Object
Thread
FormeGeometrique
Context
Util
View
fr.cnam.nfa024.TP3.Dessine$FilDAnimation$1
FilDAnimation
FilDAnimation
Cercle
Rectangle
ContextWrapper
MaVue
RectangleArrondis
ContextThemeWrapper
Activity
Dessine
Animation
Serializable
Runnable
AndroidManifest.xml
src/fr/cnam/nfa024/TP3/MaVue.java
src/fr/cnam/nfa024/TP3/Util.java
src/fr/cnam/nfa024/TP3/Dessine.java
src/fr/cnam/nfa024/TP3/FormeGeometrique.java
res/drawable/disque.xml
res/drawable/carre.xml
res/drawable/logo_cnam.png
res/layout/main.xml
res/values/colors.xml
res/values/dimens.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 













Éléments de correction du TP4 : boussole
Elements de correction : NFA024_2019_TP4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP4/Files.jar (3 Ko)

Object
Context
View
ContextWrapper
Cadrant
ContextThemeWrapper
Activity
Boussole
SensorEventListener
AndroidManifest.xml
src/fr/cnam/nfa024/tp4/Boussole.java
src/fr/cnam/nfa024/tp4/Cadrant.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 






Éléments de correction du TP5 : base de contacts
Elements de correction : NFA024_2019_TP5

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP5/Files.jar (7 Ko)

Object
fr.cnam.nfa024.tp5.ActiviteToutVoir$2
Context
BaseAdapter
SQLiteOpenHelper
Utils
Personne
ContextWrapper
ArrayAdapter
DBManager
ContextThemeWrapper
fr.cnam.nfa024.tp5.ActiviteToutVoir$1
Activity
CreerPersonne
Contacts
ActiviteToutVoir
OnItemClickListener
Serializable
AndroidManifest.xml
src/fr/cnam/nfa024/tp5/Contacts.java
src/fr/cnam/nfa024/tp5/DBManager.java
src/fr/cnam/nfa024/tp5/Personne.java
src/fr/cnam/nfa024/tp5/Utils.java
src/fr/cnam/nfa024/tp5/ActiviteToutVoir.java
src/fr/cnam/nfa024/tp5/CreerPersonne.java
res/layout/main.xml
res/layout/toutvoir.xml
res/layout/creation.xml
res/layout/contactcell.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 













Éléments de correction du TP6 : OpenData V'Lib
Elements de correction : NFA024_2019_TP6

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP6/Files.jar (4 Ko)

Object
fr.cnam.nfa024.tp6.OpenData$1$1
Context
VLibSation
Utils
Thread
ContextWrapper
fr.cnam.nfa024.tp6.OpenData$1
ContextThemeWrapper
Activity
OpenData
Runnable
LocationListener
AndroidManifest.xml
src/fr/cnam/nfa024/tp6/VLibSation.java
src/fr/cnam/nfa024/tp6/Utils.java
src/fr/cnam/nfa024/tp6/OpenData.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers