Apprendre à créer une application Android professionnel cours
Plan
2
1.Généralités
2.Les Activités
3.Les Resources
4.Les IHMs
5.Les Intents
6.Les SQLite
Positionnement d’Android
Généralités Android est un système d’exploitation OPEN SOURCE pour terminaux mobiles (smartphones, PDA, tablet, …) Conçu à la base par une startup (Android) rachetée par Google en 2005 Pour la promotion de ce système Google a fédéré autour de lui une trentaine de partenaires réunis au sein de l’Open Handset Alliance (OHA) C’est aujourd’hui le système d’exploitation mobile le plus utilisé à travers le monde |
Android/Java Le SDK Android est développé en Java permet de développer des applications avec un haut niveau d’abstraction ?Android a sa propre machine virtuelle (DVM) ?Ne supporte pas toutes les fonctionnalités de la JRE ?Une application Android ne peut pas s’exécuter sur une machine virtuelle Java ?Une application Java (native) ne peut pas s’exécuter sous Android ?Android dispose de sa propre machine virtuelle |
Android C/C++ Il est possible d’écrire des applications Android en utilisant le langage C/C++ qui seront exécutées directement par le système d’exploitation Linux embarqué ?Android fournit le kit de développement NDK pour les développements d’application en C/ C++ ?Utilisé dans le développement de jeux 2D/3D se basant fortement sur la librairie OpenGL |
Outils SDK ADB : Outil en ligne de commande permettant d’administrer un terminal (virtuel, réel) : ?Transférer des fichiers (push / pull) ?Installer une application (install) ?Connexion par sockets (forward) dx : Compilateur Android qui transforme le bytecode java en code Dalvik apkbuilder : Compiler les sources d’une application Android pour constituer une archieve (.apk) directement installable sous un terminal Android } DDMS / Monitor : Monitoring sur les activités du terminale |
Type de projets Android Il existe trois catégoriesde projets sous Android: •Application Android : Type primaire des applications Android destinées à être executées directement sur un terminal •Test Projects : Projetde test d’une application Android •Library project : Projet de types librairies, equivalents à une API exposant certaines fonctionnalités réutilisables. |
Type d’applications Android •Application de premier plan: c’est une application qui est utilisable uniquement lorsqu’elle est visible et mise en suspens lorsqu’elle ne l’est pas. •.Application d’arrière plan (Services): N’interagit pas avec l’utilisateur, elle s’exécute en tâche de fond. |
Type d’applications Android •Intermittente: c’est une application qui présente une certaine interactivité mais effectue l’essentiel de sa tâche en arrière plan. Ces applications notifient l’utilisateur lorsque cela est nécessaire. •Widget: ces applications représentées sous forme d’un widget de l’écran d’accueil. |
Répertoires d’un projet Android •bin/: Répertoire qui contient l’Application compilée. •gen/: Répertoire regroupe le code source produit par les outils de compilation Android. •libs/: Répertoire des fichiers JAR extérieurs de l’application . •res/: Répertoire qui contient les ressources utilisées par l’application (images, layouts,…). |
Répertoires d’un projet Android •src/: Répertoire qui regroupes la ou les activités de l’application. •: c’est un fichier qui décrit l’application. •assets/: Répertoire qui contient les autres fichiers statiques fournis avec l’Application pour son déploiement sur le terminal |
Ressources et valeurs "app_name">Mon application "server_url"> 64100 33000 Mercure Venus 55px |
Référencer les ressources Accéder aux vues : getResources().getLayout(R.layout.nom_layout); } ?Accéder aux valeurs : String chaine = getResources().getString (R.string.nom_string); String[] tableau= getResources(). getStringArray(R.string.nom_array); } ?Accéder aux images : Drawable monImage = getResources().getDrawable(R.drawable.nom_image) |
Référencer les ressources Référencement d’une ressource dans une autre ressource. La forme générale est : "@type/identificateur" Exemple : @string/string_name @drawable/icon @color/ma_couleur |
Structure d’une app. Android (Composants Java) • Activité (.Activity) : Programme qui gère une interface graphique • Service (.Service) : Programme qui fonctionne en tâche de fond sans interface • Fournisseur de contenu (android.content.ContentProvider) : Partage d’informations entre applications • Ecouteur d’intention diffusées (android.content.BroadcastReceiver) : |
Structure d’une app. Android (Composants Java) Permet à une application de récupérer des informations générales (réception d’un SMS, batterie faible, … • Eléments d’interaction – Intention (android.content.Intent) : permet à une application d’indiquer ce qu’elle sait faire ou de chercher un savoir-faire – Filtre d’intentions ( : permet de choisir la meilleure application pour assurer un savoir-faire |
•Chaque application doit avoir un fichier dans son répertoire racine. •Le fichier manifeste présente des informations essentielles à propos votre application pour le système Android •Le manifeste effectue les opérations suivantes : |
•Il nomme le paquet Java pour l'application(son identifiant unique) •Il décrit les composants de l'application - les activités, les services, récepteurs de radiodiffusion, et les fournisseurs de contenu qui constituent l'application. • Il nomme les classes qui implémentent chacune des composantes et publie leurs capacités (intentions). |
•Il déclare les autorisations dont l'application doit avoir pour accéder à des parties protégées de l'API et d'interagir avec d'autres applications. •Il déclare aussi les autorisations qui sont nécessaires pour d'autres avoir pour interagir avec les composants de l'application. •Il déclare que le niveau minimum de l'API Android, la liste des bibliothèques que l'application nécessite… |
Activité Une activité est un composant d'application qui fournit un écran avec laquelle les utilisateurs peuvent interagir afin de faire quelque chose, comme composer le téléphone, prendre une photo, envoyer un email, ou afficher une carte. Chaque activité est donnée à une fenêtre dans laquelle dessiner son interface utilisateur. |
Activité •Une application est généralement constitué de plusieurs activités qui sont faiblement liés entre eux. • Chaque activité peut alors démarrer une autre activité afin d'effectuer différentes actions. Chaque fois que commence une nouvelle activité, l'activité précédente est arrêté, mais le système conserve l'activité dans une pile. |
Activité •Classe héritant de la classe Activity d’Android •Doit être déclarée dans le Manifest pour être visible par le système •Ne peut être instanciée directement, cette tache se fait par le système Activity a = new Activity(); •L’instanciation d’une activité se fait par les intentions |
Création d’une activité public class ExampleActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState); // The activity is being createdddd } @Override protected void onStart() {super.onStart(); // The activity is about to become visible. } @Override protected void onResume() {super.onResume(); // The activity has become visible (it is now "resumed"). } @Override protected void onPause() {super.onPause(); // Another activity is taking focus (this activity is about to be "paused"). } } |
Les IHM Les interfaces sont définies généralement dans des fichiers XML (cela nous évite d’avoir à créer des instances explicitement) ADT génère automatiquement une ressource correspondant à l’interface dans le fichier R.java ( ! R.layout.accueil Une interface peut être associée comme vue graphique à une activité. |
) |
Les IHM La d’une interface avec l’utilisateur : •Les interfaces sont composées d’objets étendant View et ViewGroup ; •Une vue se dessine et permet les interactions avec l’utilisateur ; •Un groupe de vues contient d’autres vues ; •Un groupe de vues organise l’affichage des vues qu’il contient ; |
View View :Cette classe représente le bloc de construction de base pour les composants de l'interface utilisateur. A View occupe une zone rectangulaire sur l'écran et est responsable de l'élaboration et de la gestion des événements. Voir est la classe de base pour les widgets, qui sont utilisés pour créer des composants d'interface interactifs (boutons, champs de texte, etc.). La sous-classe ViewGroup est la classe de base pour les mises en page, qui sont des conteneurs invisibles qui détiennent d'autres vues (ou une autre vue Groupes) et définir leurs propriétés de mise en page. |
ViewGroup Un ViewGroup est une vue spécial qui peut contenir d'autres vues (appelés enfants.) Le groupe de vue est la classe de base pour les modèles et vues conteneurs. Cette classe définit également la classe ViewGroup.LayoutParams qui sert de classe de base pour les paramètres de mises en page. |
Propriétés communes aux vues •android:id="@+id/mon_iden t" •android:layout_height, android:layout_width : •fill_parent / wrap_content •fill_parent : Remplit toute la place du parent •wrap_content : remplit la place que nécessitele contenu • •android:background: "@color/blue/#000FFFF" •android:visibility : visible / invisible/gone •android:padding="10.5dp" … |
ListView(ViewGroup) Au sein d'un gabarit, on peut implanter une liste que l'on pourra dérouler si le nombre d'éléments est important. Si l'on souhaite faire une liste plein écran, il suffit juste de poser un layout linéaire et d'y implanter une ListView. Le XML du gabarit est donc: |
Menu Un menu est un endroit privilégié pour placer certaines fonctions tout en économisant l'espace dans la Fenêtre. Il existe deux sortes de menu dans Android : -Le menu d'options : celui qu'on peut ouvrir avec le bouton Menu sur le téléphone. Si le téléphone est dépourvu de cette touche, Android fournit un bouton dans son interface graphique pour y accéder. -Les menus contextuels : Similaires aux menus qui s'ouvrent à l'aide d'un clic droit sous Windows et Linux, dans Android ils se déroulent qu'on effectue un long clic sur un élément de l'interface graphique. |
Conteneurs (ViewGroup) Ce sont des vues permettant de définir une prédisposition pour d’autres vues qu’ils contiennent: - FrameLayout - AbsoluteLayout - LinearLayout - TableLayout - RelativeLayout |
Conteneurs (ViewGroup) - LinearLayout: dispose les éléments de façon linéaire (vertical ou horizontal) - RelativeLayout: Dispose les vues enfants les uns par rapport aux autres - TableLayout: disposition matricielle (ref:table HTML) |
Réutilisation du Layout Réutilisation d’interfaces : Une interface peut inclure une autre interface
android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > layout="@layout/acceuil" > |
RelativeLayout Positionner les éléments de l’interface les uns par rapport aux autres android:layout_width="match_parent" android:layout_height="match_parent" android:orientation= "horizontal" > android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/label_nom" android:textAppearance="?android:attr/textAppearanceLarge" /> android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10« android:layout_toRightOf="@+id/textView1" android:inputType="textPersonName" >
|
TableLayout è Tableau de positionnement des vues en ligne de TableRow (similaire au
è Propriétés de TableRow.LayoutParams ?layout_column: indice de départ de la colonne (à partir de 0) ?layout_span: nombre de colonnes occupées |
Communications entre composants Android offre un mécanisme puissant qui permet de faire exécuter certaines actions et de faire circuler des messages entre applications ou à l 'intérieur d'une même application Exemple : Dans votre application de gestion de personnels, vous avez un bouton a coté les coordonnées qui permet d’appeler l’employé, vous aurez pas à développer une interface pour passer l’appel ! Vous allez demandez au système de le faire à l’aide des Intent |
Intent Les intents facilitent la communication entre différents composants. Trois cas de figure : •Pour démarrer une activité (avec/sans attente de résultat •Pour démarrer un service •Pour envoyer un BroadCast |
Types d'Intents Intent Explicite : On spécifie le compsant destinataire qui va traiter l'intent (fullyqualified class name) Intent Implicite : On ne spécifie pas le composant, mais on offre suffisement d'informations permettant au systeme de trouver le bon composant capable de traiter l'intent. |
Intent explicite sans retour Si l'activité source n'attend pas de resultats de l'activité destinataire, l'appel se fait naturellement ainsi : Intent destActivite = new Intent(, IntentExample.class); // On rajoute un extra secondeActivite.putExtra(AGE, 31); // Puis on lance l'intent ! startActivity(secondeActivite); |
Intent explicite avec retour Si l'activité source attend des données qui proviennet de l'activité destinataire, l'appel se fait ainsi à l'aide de la méthode void startActivityForResult(Intent intent, int requestCode) RequestCode : identifiant unique de l'intent différent de 0 Quand l'activité appelée s'arrêtera, la première méthode de callback appelée dans l'activité précédente sera void onActivityResult(int requestCode, int resultCode, Intent data) RequestCode : l'identifiant, repérer l'intent appelant 2eme activité ResultCode : information sur l'état d'achevement du 2eme activité , Activity.RESULT_OK si tout s'est bien déroulé data: données attendues |
Intent explicite avec retour Dans la seconde activité, vous pouvez définir un résultat avec la méthode void setResult(int resultCode,Intent data) Intent result = new Intent(); result.putExtra( "akey", "1"); setResult(RESULT_OK,result); finish(); Dans l'activité 1 : data.getStringExtra("akey"); |