Beruflich Dokumente
Kultur Dokumente
Positionnement dAndroid
LiPhone (Apple) Nokia (Symbian OS) Window Mobile (Microsoft) BlackBerry Palm (WebOS) Google (Android)
Architecture dAndroid
Architecture dAndroid
Un noyau linux 2.6
Gestion de le mmoire Gestion des processus Gestion du matriel (cran clavier ) Gestion des capteurs (appareil photo, GPS, acclromtre )
Architecture dAndroid
Des bibliothques (C et C++)
Graphisme Mdias Web
Architecture dAndroid
Architecture dAndroid
Architecture dAndroid
Les applications (Activits)
Production de logiciel
AndroidManifest
Chane de compilation Code source java .java Bytecode .class Binaire Dalvik .dex
Ressources
Tlchargement
Terminal
Les ressources sont tlcharges avec lapplication Les fonctionnalits sont dans le code
Lien avec ce qui est dfini en XML Accs aux ressources
LAPI nest pas totalement celle de java (classes redfinies (par exemple Color), interfaces, couteurs ) La syntaxe des fichiers XML est extensible difficile de savoir ce qui est prdfini Les proprits dfinies en XML peuvent tre contradictoires Linterface ne peut tre utilise que par lactivit qui la cre Difficile de dvelopper sans un environnement adquat (Eclipse ou Netbeans) en raison des fichiers gnrs La pr-visualisation des interfaces par Eclipse nest pas toujours conforme (ascenseurs, contenu dfini dans le code )
Le SDK Android
Tlchargeable sur : developper.android.com/sdk sous la forme dun zip ou dun fichier dinstallation Propose le SDKManager qui permet de tlcharger les plateformes et outils :
Android versions xx Google API versions xx Outils (tools et platform-tools)
dx transforme le bytecode java en code Dalvik apkbuilder constitue un fichier .apk tlchargeable sur le terminal Remarque : Eclipse utilise ces outils directement mais on est parfois oblig dy recourir (transfert de fichiers, installations directes dapplications )
Eclipse
Tlchargeable sur www.eclipse.org Ne ncessite pas dinstallation (simple copie) Le plugin pour Android est tlcharg et install depuis Eclipse (Menu Help Install New Software) sur https://dl-ssl.google.com/android/eclipse Il suffit ensuite dindiquer Eclipse o se trouve le SDK Android (Menu Windows Preferences Android)
Remarque : les paramtrages dEclipse sont lis lespace de travail nouvel espace nouveaux paramtres
Zone ddition
Explorateur
Terminaux connects
Terminaux disponibles
Le terminal virtuel
. . .
Le fichier AndroidManifest
Gnr par Eclipse, contient la description de lapplication
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="iut.tp1" android:versionCode="1" android:versionName="1.0"> <uses-sdk android:minSdkVersion="7" /> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".DemoCoursActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
On modifiera ce fichier pour dclarer les lments de lapplication, les permissions, etc.
Le Fichier AndroidManifest
Modifiable directement ou par des formulaires
Manifest
Application
Nom Icne Elments constituant lapplication (activits, services, )
Permissions
Accs aux capteurs Accs au rseau Accs la tlphonie
Les ressources
Les ressources
Application embarque tout doit tre dans le fichier .apk tlcharg Le rpertoire res contient toutes les ressources qui seront mises dans le apk :
drawable-hdpi (images en haute dfinition) drawable-ldpi (images en basse dfinition) drawable-mdpi (images en moyenne dfinition) layout (description en XML des interfaces) values (dfinitions en XML de constantes : chanes, tableaux, valeurs numriques ) anim (description en XML danimations) menus (description en XML de menus pour lapplication) xml (fichiers XML utiliss directement par lapplication) raw (tous les autres types de ressources : sons, vidos, )
Les noms (identificateurs) servent a les dsigner : Dans dautres fichiers XML Dans le code
La classe R
Cest une classe gnre par Eclipse qui permet lapplication daccder aux ressources Elle contient des classes internes dont les noms correspondent aux types de ressources (id, drawable, layout ) Elle est constitue partir des fichiers placs dans les sous rpertoires du rpertoire res Une proprit est cre pour :
Chaque image plac dans drawable-xxxx Chaque identificateur dfini dans des fichiers XML (objets dinterface, constantes) Chaque fichier plac dans les rpertoires xml , raw
Rfrencement dune ressource dans le code. La forme gnrale est : R.type.identificateur Par exemple : R.string.machaine
Fait rfrence la mme chaine
La classe Resources
Permet laccs aux ressources rpertories dans R On obtient une instance de cette classe par getResources() de lactivit Principales mthodes de la classe Resources (le paramtre est un identifiant dfini dans R de la forme R.type.nom) :
boolean getBoolean(int) int getInteger(int) int[] getArray(int) String getString(int) String[] getStringArray(int) int getColor(int) float getDimension(int) Drawable getDrawable(int)
Ressource distante
Uri.parse("http://domaine.sous_doamine/chemin/nom_du_fichier"); Uri.fromFile(File)
Les applications
Service (android.app.Service)
Fournisseur de contenu (android.content.ContentProvider) Ecouteur dintention diffuses (android.content.BroadcastReceiver) : Permet une application de rcuprer des informations gnrales (rception
dun SMS, batterie faible, )
Elments dinteraction
Intention (android.content.Intent) : permet une application dindiquer ce quelle sait faire ou de chercher un savoir-faire Filtre dintentions (<intent-filter> : permet de choisir la meilleure application pour assurer un savoir-faire
Service
<service> <intent-filter> les savoir-faire </intent-filter> </service>
Fournisseur de contenu
<provider> <grant-uri-permission /> <path-permission /> </provider>
Application Android
Une activit = un programme + une interface Un service = un programme sans interface Une application =
Une activit principale Eventuellement une ou plusieurs activits secondaires Eventuellement un ou plusieurs services Eventuellement un ou plusieurs couteurs dintentions diffuses Eventuellement un ou plusieurs fournisseurs de contenu
Activit Android
Classe qui hrite de Activity ou dune classe drive de Activity (par exemple de MapActivity pour utiliser Google maps, ListActivity ou TabActivity pour des interfaces particulires) On surcharge certaines mthodes qui sont appeles par Android pour dfinir le comportement (mme principe que les applets) :
onCreate onDestroy onStart onPause onResume onStop onRestart lors de la cration lorsque lactivit se termine lorsque lactivit dmarre ou redmarre lorsque lactivit nest plus en premier plan lorsque lactivit revient en premier plan lorsque lactivit nest plus visible lorsque lactivit redevient visible
L'activit dmarre
Etats principaux :
Active
Aprs lexcution de onResume
Le processus est tu
Suspendue
L'activit passe en premier plan
onPause()
Arrte
L'activit n'est plus visible onStop()
Termine
Aprs lexcution de onDestroy
onDestroy()
Les interfaces
Lcran peut tre tourn Tous les smartphones nont pas la mme dfinition dcran
Cration dinterfaces
Par programme (comparable java swing) mais avec des classes propres Android
Dfinition de conteneurs (un conteneur = un conteneur + un mode de placement JPanel + Layout) Dfinition dlments dinteraction (widgets) + placement et ajout dans les conteneurs
Par description dans des fichiers xml (forme dclarative statique) Une interface est un arbre dont la racine est lcran et les feuilles les lments de linterface (boutons, textes, cases cocher, )
View ViewGroup FrameLayout DatePicker TimePicker ScrollView HorizontalScrollView LinearLayout TableLayout RadioGroup RelativeLayout AdapterView AbsListView ListView GridView AbsSpinner Spinner Gallery TextView EditText AutoCompleteTextView Button CompoundButton CheckBox ToggleButton RadioButton DigitalClock Chronometer ImageView ImageButton Progressbar AbsSeekBar RattingBar SeekBar AnalogClock
Ailleurs
LayoutInflater decodeur = LayoutInflater.from(contexte); View vue = decodeur.inflate(R.layout.nom_du_fichier_xml, parent, false); contexte est lactivit qui gre cette interface parent est le contenant dans lequel doit se placer la vue constitue partir du fichier XML Il ne reste plus qu ajouter cette vue dans le conteneur.
Dans les fichiers XML les units sont exprimes sous la forme : 24.5mm ou 65px
Les conteneurs
FrameLayout (un seul lment) AbsoluteLayout (plusieurs lments placs par leur coordonnes) LinearLayout (plusieurs lments placs horizontalement ou verticalement sans ascenseurs) TableLayout (plusieurs lments en tableau sans ascenseurs) RelativeLayout (plusieurs lments placs relativement les uns aux autres) ScrollView (un seul lment avec ascenseur vertical) HorizontalScrollView (un seul lment avec ascenseur horizontal)
Les groupes
Regrouper des lments participant un choix
ListView (plusieurs lments organiss en liste verticale avec sparateurs). Souvent utilis pour des listes de mots (type menu). GridView (plusieurs lments organiss en table). Souvent utilis pour des tables de mots (type menu). RadioGroup (groupe de boutons radio dont un seul peut tre coch la fois) Gallery (plusieurs lments organises horizontalement avec dfilement). Souvent utilis pour des images
Fond
android:background couleur ou une image de fond
Taille
android:minHeight et android:minWidth dimensions minimales
</LinearLayout>
Les Contenants
FrameLayout
Ne contient quun seul lment (si on en met plusieurs ils se superposent) Proprits supplmentaires : Contenu
android:foreground Pour dfinir une couleur ou une image. android:foregroundGravity Pour positionner limage
LinearLayout
Pour placer plusieurs lments en ligne ou en colonne sans ascenseur (utiliser ScrollView et/ou HorizontalScrollView). Proprits supplmentaires :
android:orientation Pour en dfinir le sens du LinearLayout (vertical ou horizontal) android:layout_weightSum Un paramtre de type : android:layout_weight peut tre associ chacun des lments placs dans le LinearLayout pour indiquer leur poids de redimensionnement relatif la valeur de layout_weightSum. Par exemple : android:layout_weightSum= "100" permettra de placer 2 lments ayant android:layout_weight = "60" et android:layout_weight = "40"
AbsoluteLayout
Pour placer les lments par positions fixes. Chaque lment ajout dans un AbsoluteLayout indiquera sa position en mettant dans ses proprits :
android:layout_x="unit" android:layout_y="unit"
TableLayout
Pour placer des lments en tableau sans ascenseurs (pour en avoir le mettre dans un ScrollView et/ou un HorizontalScrollView). Proprits supplmentaires :
android:collapseColumns Pour dfinir les numros de colonnes cacher android:shrinkColumns Pour dfinir les numros de colonnes qui peuvent tre rtrcies en fonction de la place disponible android:stretchColumns Pour dfinir les numros de colonnes qui peuvent tre agrandies en fonction de leur contenu
Chaque lment ajout dans un TableLayout indiquera le nombre de colonnes quil occupe en mettant dans ses proprits :
android:layout_span (par dfaut 1)
RelativeLayout
Permet de placer des lments les uns relativement aux autres
Placement par rapport au conteneur
android:layout_alignParentBottom="b" (o b vaut true ou false) android:layout_alignParentLeft="b" (o b vaut true ou false) android:layout_alignParentRight="b" (o b vaut true ou false) android:layout_alignParentTop="b" (o b vaut true ou false) android:layout_centerHorizontal="b" (o b vaut true ou false) android:layout_centerInParent="b" (o b vaut true ou false) android:layout_centerVertical="b" (o b vaut true ou false)
ScrollView et HorizontalScrollView
En gnral utiliss pour ajouter des ascenseurs un conteneur. Ne peuvent contenir quun seul lment (le plus souvent un conteneur). Proprits supplmentaires :
android:fillViewport="b" (o b vaut true ou false) indique si le contenu doit tre tir pour occuper la place disponible ou pas
ATTENTION : En raison de lcran tactile le dfilement porte sur llment le plus externe (le plus haut dans larbre de linterface)
Les Groupes
ListView
Place les lments en liste verticale et ajoute un ascenseur si ncessaire
Sparateurs
android:divider Pour dfinir la couleur des sparateurs ou pour utiliser une image comme sparateur. android:dividerHeight="unit" Pour dfinir la hauteur des sparateurs (mme sils contiennent une image)
Type de choix
android:choiceMode="c" (o c peut prendre les valeurs : none, singlechoice, multipleChoice) pour indiquer le mode de choix dans la liste (aucun, un seul, plusieurs).
ListView (contenu)
En XML (texte seulement)
android:entries="@array/maliste" dfinit le contenu de la liste partir du contenu d'un fichier xml plac dans res/values/ et qui a la forme :
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="maliste"> <item>premier lment</item> <item>deuxime lment</item> <item>dernier lment</item> </string-array> </resources>
On utilise un gestionnaire de contenu (Adapter) setAdater(Adapter) pour associer la ListView Soit de classe prdfinie (ArrayAdapter , SimpleAdapter, CursorAdapter) ArrayAdapter(Context, type) le second paramtre est une type prdfini : android.R.layout.simple_list_item_1 pour une liste choix unique ou android.R.layout.simple_list_item_multiple_choice pour une liste choix multiple (une case cocher apparat cot de chaque lment de la liste) ArrayAdapter.add(Object) pour remplir la liste Soit de classe personnalise (hritage de BaseAdapter)
Exemple de ListView
En XML
Dans le XML dinterface
<ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/liste_de_planetes android:entries ="@array/planetes" android:layout_width="fill_parent" android:layout_height="fill_parent" android:divider="@drawable/separateur" android:dividerHeight="25px" android:choiceMode="multipleChoice" />
Dans le code
ListView liste = (ListView) findViewById(R.id.liste_de_planetes); String[] elements = getResources().getStringArray(R.array.planetes); ArrayAdapter<String> adaptateur = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice); for (int i=0; i<elements.length; i++) adaptateur.add(elements[i]); liste.setAdapter(adaptateur);
GridView
Fonctionne comme ListView mais permet une prsentation en plusieurs colonnes Exemple
Dans le XML dinterface
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/liste_de_planetes" android:entries ="@array/planetes" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="2" android:stretchMode="columnWidth" android:columnWidth="60dp" android:gravity="fill_horizontal" android:choiceMode="multipleChoice" />
RadioGroup
Pour grouper des boutons radio (ajoute un ascenseur si ncessaire) Un seul bouton peut tre coch la fois (attention ltat initial qui nest pris en compte par le RadioGroup que sil est fait par la mthode check du RadioGroup) Exemple de fichier XML :
<RadioGroup android:id="@+id/groupe_de_boutons" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <RadioButton /> <RadioButton /> </RadioGroup>
Gallery
Normalement utilis pour faire des galeries dimages avec dfilement horizontal Proprits supplmentaires
android:animationDuration Pour dfinir la dure de la transition (en ms) lorsque l'on passe d'un lment l'autre android:unselectedAlpha Pour dfinir la transparence des lments non slectionns
Pour remplir une galerie il faut un Adapter (comme pour ListView) mais que lon doit crire par hritage de la classe BaseAdapter puis lassocier la galerie par la mthode setAdapter
Exemple de fichier XML : <Gallery android:id="@+id/magalerie" android:layout_width="fill_parent" android:layout_height="wrap_content" android:unselectedAlpha="0.5" />
Taille
android:layout_height="t" (o t peut tre une unit ou prendre les valeurs FILL_PARENT ou WRAP_CONTENT) android:layout_width="t" (o t peut tre une unit ou prendre les valeurs FILL_PARENT ou
WRAP_CONTENT)
Marges externes
android:layout_marginBottom="unit" marge externe en bas android:layout_marginLeft="unit" marge externe gauche android:layout_marginRight="unit" marge externe droite android:layout_marginTop="unit" marge externe en haut
Dans le cas dun LinearLayout ce paramtre ne permet pas de modifier le placement implicite (les uns cot des autres ou les uns sous les autres selon lorientation du LinearLayout)
Comme un traitement de texte on ne peut pas faire une ligne dont le dbut est cadr gauche et la fin est cadre droite ! Pour obtenir ce type de placement il faut encapsuler llment dans un FrameLayout et le placer dans celui-ci
ImageView
Permet dafficher des images Proprits :
Contenu
android:src Pour dfinir une couleur ou une image. android:tint Pour dfinir une couleur qui teinte l'image
Taille
android:maxHeight Pour dfinir la hauteur maximale android:maxWidth Pour dfinir la largeur maximale
ImageView Exemples
<ImageView android:id="@+id/image" android:src="@drawable/keithwembley" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxHeight="200px" android:adjustViewBounds="true" android:scaleType="centerCrop" /> <ImageView android:id="@+id/image" android:src="@drawable/keithwembley" android:layout_width="fill_parent" android:layout_height="wrap_content" android:maxHeight="200px" android:adjustViewBounds="true" android:scaleType="fitXY" />
TextView et EditText
TextView est normalement utilis pour afficher un texte tandis que EditText lest pour saisir du texte
Proprits :
Dimensions de texte
android:ems Pour dfinir la taille du texte en caractres android:maxems Pour dfinir le nombre de caractres des lignes du texte android:height="unit" android:maxheight="unit" android:minheight="unit" android:width="unit" android:maxwidth="unit" android:minwidth="unit"
TextView et EditText
Contenu
android:text="texte a afficher" android:hint="initial" dfinit le texte afficher quand la zone est vide
TextView et EditText
Comportement du texte
android:autoLink="a" (o a peut tre : none, web, email, phone, map ou all) indique si les liens de ce type apparaissant dans le texte sont automatiquement rendus cliquables. android:autoText Pour valider ou pas le mode correction du texte android:capitalize="c" (o c peut tre : none, sentences, words, characters) indique le type de saisies que le texte mmorise et peut re-proposer. android:digits Pour indiquer si la saisie n'accepte que du numrique ou pas android:numerics="x" (o x peut tre integer, signed, decimal) dfinit le mode de saisie numrique android:password pour cacher ou pas le texte lors d la saisie android:phonenumber Pour indiquer si la saisie n'accepte que des n0s de tlphone android:inputType Pour dfinir le mode de saisie (none, text, textCapCharacters, textCapWords, textCapSentences, textAutoCorrect, textAutoComplete, textMultiLine, textUri, textEmailAddress, textEmailSubject, textShortMessage, textLongMessage, textPersonName, textPostalAddress, textPassword, textVisiblePassword, textWebEditText, textFilter, textPhonetic, textWebEmailAddress, textWebPassword, number, numberDecimal, numberPassword, phone, datetime, date ou time)
TextView et EditText
Affichage
android:cursorVisible Pour rendre visible ou non le curseur android:editable Pour autoriser ou pas la modification du texte android:ellipsize="e" (o e peut tre : none, start, middle, end, marquee) dfinit le mode de csure du texte android:linksClickable Pour rendre ou pas les liens cliquables android:textIsSelectable pour autoriser/interdire la slection de texte
Couleurs et images
android:textColor Pour dfinir une couleur au texte android:textColorHighlight Pour dfinir une couleur de surlignage du texte android:textColorHint Pour dfinir une couleur au texte par dfaut android:textColorLink Pour dfinir une couleur aux liens du texte android:drawableBottom Pour dfinir une couleur ou une image de fond au texte
AutoCompleteTextView
Cest une spcialisation de EditText pour apporter lauto compltion Proprits supplmentaires:
android:completionHint="texte" texte affich en titre du menu droulant android:completionThreshold Pour dfinir le nombre de caractres taper avant que la compltion n'entre en action. android:dropDownHeight="unit" on peut aussi utiliser les constantes fill_parent et wrap_content, dfinit la hauteur du menu droulant android:dropDownWidth="unit" on peut aussi utiliser les constantes fill_parent et wrap_content, dfinit la hauteur du menu droulant android:dropDownHorizontalOffset Pour dfinir le dcalage horizontal du menu droulant android:dropDownVerticalOffset Pour dfinir le dcalage vertical du menu droulant
Les boutons
Button
Mmes paramtres que TextView
ImageButton
Mmes paramtres que ImageView cd :
android:src="couleur" pour dfinir une couleur ou une image android:adjustViewBounds Pour indiquer si la taille du bouton doit ou pas tre ajuste celle de l'image android:baselineAlignBottom Pour indiquer que l'image est place ou pas en bas de la zone android:cropToPadding Pour indiquer si l'image sera coupe ou pas si elle est plus grande que la taille disponible android:scaleType="s" (o s peut prendre les valeurs : matrix, fitXY, fitStart, fitCenter, fitEnd, center, centerCrop, centerInside) permet de redimensionner ou pas l'image la taille disponible et/ou de la dformer. android:maxHeight Pour dfinir la hauteur disponible android:maxWidth Pour dfinir la largeur disponible android:tint Pour dfinir une couleur qui teinte l'image
TimePicker
ProgressBar
Deux comportements selon que lon connat ou pas la valeur maximale
android:indeterminate Pour dfinir le type de progressBar (true=indtermin, false=dtermin).
Dimensions
android:maxHeight="unit" android:minHeight="unit" android:maxWidth="unit" android:minWidth="unit"
SeekBar
C'est un ProgressBar sous forme de barre horizontale dote d'un curseur permettant de modifier la valeur si on a choisi
android:indeterminate="false"
RatingBar
Paramtres :
android:isIndicator Pour indiquer si l'utilisateur peut modifier la valeur ou pas (true= non modifiable) android:numStars Pour dfinir le nombre d'toiles affiches android:rating Pour dfinir la position initiale android:stepSize Pour dfinir le pas de progression (on peut colorier des dtoiles par exemple)
Horloges et Chronomtres
AnalogClock DigitalClock Chronometer
android:format="f" (o f est une chane dans laquelle la premire occurrence de %s sera remplace par la valeur du chronomtre sous la forme MM:SS ou H:MM:SS)
qui permettent de leur associer des couteurs dvnements Certains lments ont des couteurs spcifiques
Evnements gnraux
Evnement Clic Clic long Clavier
setOnKeyListener View.OnKeyListener Association Classe setOnClickListener View.OnClickListener Mthode Paramtres onClick(View) lment concern
setOnLongClickListener onLongClick(View) View.OnLongClickListener lment concern onKey(View, int, KeyEvent) lment concern Code clavier Evnement clavier onTouch(View, MotionEvent) lment concern Evnement de touch
Touch
setOnTouchListener View.OnTouchListener
Evnements spcifiques
ListView , GridView et Gallery
Evnement sur un lment Clic Association Classe Mthode
Paramtres
onItemClick(AdapterView, View, int, long) Gestionnaire de contenu lment concern Rang de llment Identifiant de llment onItemLongClick(AdapterView, View, int, long) Idem onItemSelected (AdapterView, View, int, long) Idem onNothingSelected(AdapterView)
setOnItemClickListener
AdapterView.OnItemClickListener
setOnItemLongClickListener
AdapterView.OnItemLongClickListener
setOnItemSelectedListener
AdapterView.OnItemSelectedListener
Evnements spcifiques
Spinner et AutoCompleteTextView
Evnement sur un lment Slection Association Classe Mthode
Paramtres
onItemSelected (AdapterView, View, int, long) Elment permettant le choix lment concern Rang de llment Identifiant de llment onNothingSelected(AdapterView)
setOnItemSelectedListener
AdapterView.OnItemSelectedListener
Evnements spcifiques
TextView et EditText
Evnement Association Classe
TextWatcher
Mthode
Paramtres
onEditorAction(TextView, int, KeyEvent)
Elment concern EditorInfo.IME_NULL (si touche Entre) Evnement clavier (si touche Entre)
Modification
addTextChangedListener TextChangedListener
Saisie
setKeyListener KeyListener
Evnements spcifiques
DatePicker
Evnement de choix
Choix
TimePicker
Evnement de choix
Choix
Evnements spcifiques
SeekBar
Evnement
Association Classe
Curseur dplac
setOnSeekBarChangeListener SeekBar.OnSeekBarChangeListener
onStartTrackingTouch( SeekBar)
Elment concern
onStopTrackingTouch( SeekBar)
Elment concern
Evnements spcifiques
RatingBar
Evnement
Valeur modifie
Mthode Paramtres onRatingChanged(RatingBar, setOnRatingBarChangeListener RatingBar.OnRatingBarChangeListener float, boolean) Elment concern Association Classe
Valeur choisie Action de lutilisateur
Chronometer
Evnement
Incrmentation
Association Classe
Notifications
La classe Toast
Texte qui apparat en premier plan puis disparat au bout d'un temps donn
Cration d'un Toast
Toast.makeText(Context, String, int) renvoie l'objet de classe Toast cr. Le premier paramtre est l'activit Le deuxime paramtre est le message afficher Le dernier paramtre indique la dure d'affichage les seules valeurs possibles sont : Toast.LENGTH_SHORT (2 secondes) ou Toast.LENGTH_LONG (5 secondes).
Menus
Menus
Deux types
Menu gnral de lactivit Menu contextuel associ un lment dinterface
Contiennent des rubriques sous la forme texte et/ou image Dcrits par un fichier XML plac dans res/menu (rpertoire crer) de la forme :
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/nom_du_choix_1" android:icon="@drawable/image_du_choix_1" android:title="@string/texte_du_choix_1" /> <item /> </menu>
Sous menus
Chaque lment dun menu peut proposer des sous menus Dcrits dans le fichier XML sous la forme :
<item android:id="@+id/nom_du_choix_N" android:icon="@drawable/image_du_choix_N" android:title="@string/texte_du_choix_N"> <menu> <item android:id="@+id/nom_du_sous_choix_1" android:title="texte_du_sous_choix_1" /> </menu> </item>
Menu gnral
Apparat par appui de la touche Menu Cration dans la mthode onCreateOptionMenu de l'activit partir du fichier xml de description du menu sous la forme :
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.nom_du_fichier_xml_du_menu, menu); return true; }
Menu gnral
Ractions aux choix
Dans la mthode onOptionsItemSelected de l'activit qui est appele lorsque l'utilisateur fait un choix dans un menu ou un sous menu gnral :
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.nom_du_choix_1: // traitement du choix 1 return true; case R.id.nom_du_sous_choix_1: // traitement du sous choix 1 return true; default: return super.onOptionsItemSelected(item); } }
Menu contextuel
Apparat par appui long sur llment dinterface Associ llment dinterface par la mthode :
registerForContexMenu(element_associe_au_menu_contextuel);
Cration dans la mthode onCreateContextMenu de l'activit partir du fichier xml de description du menu sous la forme :
public void onCreateContextMenu(ContextMenu menu, View element, ContextMenuInfo info) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.nom_du_fichier_xml_du_menu, menu); }
Menu contextuel
Ractions aux choix
Dans la mthode onContextItemSelected de l'activit qui est appele lorsque l'utilisateur fait un choix dans un menu ou un sous menu contextuel :
public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.nom_du_choix_1: // traitement du choix 1 return true; case R.id.nom_du_sous_choix_1: // traitement du sous choix 1 return true; default: return super.onContextItemSelected(item); } }
Couleurs et images
La classe Color
Diffrente de celle de java
argb(int, int, int, int) renvoie le code de la couleur dfinie par les 4 paramtres (transparence, rouge, vert, bleu). Le 1er paramtre peut tre omis pour obtenir une couleur opaque. alpha(int) renvoie la transparence de la couleur dont le code est pass en paramtre red(int) renvoie la composante rouge de la couleur dont le code est pass en paramtre green(int) renvoie la composante verte de la couleur dont le code est pass en paramtre blue(int) renvoie la composante bleue de la couleur dont le code est pass en paramtre
Couleurs prdfinies
Color.BLACK, Color.WHITE Color.LTGRAY, Color.GRAY, Color.DKGRAY Color.RED, Color.GREEN, Color.BLUE Color.CYAN, Color.MAGENTA, Color.YELLOW Color.TRANSPARENT
La classe Drawable
Classe de tout ce qui peut se dessiner (dont les images)
Quelques types :
Bitmap : image PNG ou JPEG Nine Patch : extension de PNG permettant dindiquer comment la dformer. Le SDK propose un utilitaire draw9path plac dans le rpertoire tools Shape : dessin Layers : calques States : image ayant plusieurs tats (aspects) par exemple pour avoir un aspect diffrent quand slectionn, actif
La classe BitmapDrawable
Spcialisation de Drawable pour les images
La classe BitmapFactory
Permet de crer des images depuis diverses sources Un tableau doctets (decodeByteArray) Un fichier (decodeFile)
Une ressource (decodeResource) Un flux (decodeStream)
Mode implicite :
On dcrit lactivit lancer et Android recherche une activit correspondant cette description (par exemple un navigateur web)
On peut ventuellement passer des paramtres et rcuprer des valeurs de retour de lactivit lance
Invocation implicite
Activit Appelante Intent Android Intent
Filtre Activit
Filtre Activit
Android choisit lactivit lancer en fonction de lIntent mis par lactivit appelante et des filtres associs aux activits prsentes Lactivit choisie reoit cet Intent Lactivit choisie renvoie un Intent lappelante lorsquelle se termine
Intention diffuse
Intent Android
Android envoie lIntent toutes les applications ayant un couteur dintentions diffuses associ des filtres correspondants cet Intent
LIntent
Informe sur les intentions de lactivit ou du service recherch par 3 lments :
Action
Chane de caractres qui indique le type daction recherch (par exemple appel tlphonique)
Catgorie
Chane de caractres qui indique la catgorie de lactivit recherche (par exemple CATEGORY_LAUNCHER indique une activit propose comme excutable par Android (icne de lancement))
Donne ou Type
Chane de caractres et Uri qui indiquent la donne transmise lactivit lance (par exemple le nde tlphone) ou le type de rponse attendu
Peut contenir les paramtres passs lactivit lance Peut contenir les valeurs renvoyes par lactivit lance
Ajout de catgorie
addCategory(String) ajoute une catgorie setDataAndType(Uri, String) dfinit lUri et le type mime des donnes
Comparaison
filterEquals(Intent) renvoie true si le paramtre correspond au mme filtre
Contenu
getAction() renvoie laction (String) getCategories() renvoie les catgorie (collection de String) getData() renvoie lUri correspondant aux donnes (Uri) getType() renvoie le type mime des donnes (String)
Paramtres
putExtra(nom, valeur) ajoute un paramtre associ un nom getxxxExtra(nom) renvoie le paramtres correspondant au nom (xxx dpend du type de paramtre : Int, String, StringArray )
Filtres dintentions
Dans le AndroidManifest.xml chaque activit ou service est associ un ou plusieurs filtres dintentions qui permettent Android de choisir une activit (en mode implicite) Forme gnrale :
<activity android:name=".Nom_De_La_Classe_De_L_Activit" > <intent-filter> <action android:name=nom_d_action_1 /> . <action android:name=nom_d_action_N /> <category android:name=nom_de_categorie_1 /> <category android:name=nom_de_categorie_N /> <data android:mimeType=nom_de_type_mime android:scheme=protocole://hote:port/chemin /> /> </intent-filter> <intent-filter> </intent-filter> </activity>
Filtrage dintentions
En mode explicite il ny a aucun filtrage
Lobjet Intent de lappelant est transmis lappel
En mode implicite Android utilise les informations contenues dans lobjet Intent de lappelant pour les confronter aux filtres dfinis par les activits connues dans leur fichiers AndroidManifest. Ces filtres dfinissent les capacits de lactivit en termes :
Dactions : lune des actions indiques dans lIntent doit correspondre lune de celles du filtre De catgorie : toutes les catgories indiques dans lIntent doivent apparatre dans le filtre De donnes : le type de donnes indiqu dans lIntent doit correspondre celui du filtre
Catgories
android.intent.category.DEFAULT activit pouvant tre lance explicitement android.intent.category.BROWSABLE peut afficher une information dsigne par un lien android.intent.category.LAUNCHER activit propose au lancement par Android android.intent.category.TAB activit associe dans un onglet dinterface (TabHost)
En gras le cas dune activit principale dapplication La plupart des valeurs prdfinies correspondent des activits disponibles sur Android (appel tlphonique, navigateur )
Exemple
On a crit une application contenant une activit de traduction franais/basque Cette activit affiche 2 zones de texte et un bouton : on tape le texte traduire dans la 1re zone quand on clique le bouton la traduction saffiche dans la 2me zone On prvoit que lactivit puisse dmarrer avec un texte traduire quelle reoit dans un Bundle (on verra plus tard comment faire) On la dote dun filtre avec :
Action = android.intent.action.VIEW Catgorie = "Traduction FR-BSQ" Type mime de donnes = "text/plain
Un dveloppeur ayant cette application installe pourra lancer une traduction depuis une application en prparant un Intent runissant ces informations et en y ajoutant la chane traduire : Android la trouvera pour lui et la lancera Si cette application a prvu de renvoyer la chane traduite quand elle se termine, lautre application pourra la rcuprer et lutiliser.
Permissions
Une activit ne peut accder certaines ressources matrielles quavec une permission Les permissions apparaissent dans le AndroidManifest Elles sont visibles par lutilisateur (scurit) Elles concernent :
La golocalisation (GPS) Les accs aux contacts et l'agenda du tlphone Les modifications de paramtres (orientation, fond dcran ) Les appels tlphoniques Lenvoi et rception de SMS/MMS Laudio Le rseau (dont laccs Internet) Le matriel (bluetooth, appareil photo, )
Tlphonie (appel)
Permettre lutilisateur dappeler un ncompos
Uri numero = Uri.parse("tel:0559574320"); Intent composer = new Intent(Intent.ACTION_DIAL, numero); startActivity(composer);
Appeler directement un n
Uri numero = Uri.parse("tel:0559574320"); Intent appeler = new Intent(Intent.ACTION_CALL, numero); startActivity(appeler);
</intent-filter> </receiver>
2. Ecriture de lcouteur dintention diffuses par hritage de BroadcastReceiver et surcharge de la mthode onReceive 3. LIntent reu en paramtre de onReceive contient les messages reus sous forme brute dsigns par la cl "pdus" 4. Ces message bruts peuvent tre convertis en objets de classe SmsMessage par la mthode createFromPdu de cette classe. 5. Un SmsMessage permet de rcuprer lexpditeur, le corps du message ainsi que lexpditeur et le corps dun mail Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.RECEIVE_SMS" />
3.
4.
Il faut avoir positionn les permissions : <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
Appareil photo
La classe Camera permet la prise de photo par takePicture en associant un couteur dvnement pour rcuprer la photo en raw ou JPEG. La mthode onPictureTaken de cet couteur est appel quand la photo est faite, limage est reue en tableau doctets. Ncessite une prvisualisation par un objet de classe SurfaceView dans linterface auquel on associe un couteur dvnements pour :
Dmarrer/arrter lappareil photo (mthodes open et release de la classe Camera) Lancer/arrter la prvisualisation (mthodes startPreview et stopPreview de la classe Camera)
On peut enregistrer le tableau doctets reu par onPictureTaken dans un fichier ou utiliser BitmapFactory pour le convertir en image Il faut avoir positionn la permission :
<uses-permission android:name="android.permission.CAMERA" />
Capteurs
Les types de capteurs disponibles sont les suivants (selon le modle certains capteurs peuvent ne pas tre disponibles) :
Acclromtre (acclration du priph sur 3 axes) Gravit (composante de la gravit selon les 3 axes) Gyroscope (vitesse angulaire de rotation du priph sur 3 axes) Lumire (luminosit ambiante) Champ magntique (champ magntique ambiant sur 3 axes) Orientation (angles du priph par rapport aux 3 axes) Pression (pression exerce sur lcran tactile) Proximit (dtection de proximit souvent binaire) Temprature (temprature ambiante)
Multimdia
Audio
Crer un MediaPlayer :
MediaPlayer lecteur = MediaPlayer.create(Context, int) Le premier paramtre est l'activit elle-mme Le second paramtre est l'identificateur du fichier son obtenu par : R.raw.nom_du_fichier_son
Utiliser le MediaPlayer :
lecteur.start() pour jouer le son lecteur.pause() pour suspendre le son, il sera repris par start() lecteur.stop() pour arrter le son, il sera repris par : lecteur.reset(); lecteur.prepare(); lecteur.start();
MediaPlayer (utilisation)
Configuration
prepare() initialisation du player release() libre les ressources du player ( faire dans la mthode onDestroy de l'aactivit) reset() rinitialisation du player setDataSource(String) dfinit le mdia par un chemin de fichier ou une URL setDataSource(Context , Uri) dfinit le mdia par une Uri setLooping(boolean) met le player en mode boucle setVolume(float, float) dfinit le volume (le 1er paramtre est la voie gauche, le second la voie droite)
Controle
pause() met en pause seekTo(int) dplacement dans le mdia en ms (en + ou en -) start() lancement stop() arrt
Etat
getCurrentPosition() renvoie la position actuelle dans le mdia (en ms) getDuration() renvoie la dure du mdia (en ms) isPlaying() renvoie true si le media est en cours isLoopPlaying() renvoie true si le media est en mode boucle
MediaPlayer (vnements)
Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur d'vnements
onCompletion(MediaPlayer) appele lorsque le mdia se termine
Vido
Mettre un VideoView dans linterface
<VideoView android:id="@+id/ecran_video" android:layout_width="fill-parent" android:layout_height="fill-parent" />
Si on a mis setMediaController, lors dun clic long sur la vue une fentre de contrle apparat avec :
Un bouton Play/pause Un bouton Avance rapide Un bouton Recul rapide Un curseur indiquant la position courante et permettant de se dplacer
VideoView
Configuration
setMediaController(MediaController) associe un contrtleur de mdia setVideoPath(String) dfinit le mdia par un chemin de fichier setVideoURI(Uri) dfinit le mdia par une Uri
Controle
start() lancement pause() mise en pause, reprise par start() seekTo(int) dplacemant dans le mdia, le paramtre est un temps en ms partir du dbut stopPlayback() arrt dfinitif ne sera pas relanc par start()
Etat
canPause() renvoie true si le media peut tre mis en pause canSeekBackward() renvoie true si le media peut tre recul canSeekForward() renvoie true si le media peut tre avanc getBufferPercentage() renvoie le pourcentage d'occupation du buffer de mdia getCurrentPosition() renvoie la position actuelle dans le mdia (en ms) getDuration() renvoie la dure du mdia (en ms) isPlaying() renvoie true si le media est en cours
Evnements
setOnCompletionListener(MediaPlayer.OnCompletionListener) associe un couteur d'vnements mthode onCompletion(MediaPlayer) appele lorsque le mdia se termine.
Synthse de parole
Crer un synthtiseur :
parle = new TextToSpeech(activit, new SynthPret());
Synthtiser un texte :
parle.speak(texte a dire, TextToSpeech.QUEUE_FLUSH, null);
TextToSpeech
Rglages :
setSpeechRate(float) permet de rgler la vitesse de synthse (1 normal, <1 plus lent, >1 plus rapide) setPitch(float) permet de rgler la tonalit (1 normal, <1 plus grave, >1 plus aigu)
Internet
Vido :
La seule chose qui change cest lUri qui dsigne le mdia
Uri chemin = Uri.parse("http://domaine. sous_domaine /rep1/nom_video.3gp");
Services WEB
La recherche peut tre limite un pays ou une zone gographique Utilise la classe Address qui contient :
Coordonnes GPS Nom de pays Nom de ville Code postal Adresse complte (n , rue, )
Localisation
Cration Geocoder(activit, Locale) le second paramtre indique la zone gographique concerne, il peut prendre les valeurs (Locale.FRANCE, Locale.CANADA, Locale.UK, Locale.US ). Omis si l'on ne souhaite pas limiter la localisation. Recherches getFromLocation(double, double, int) renvoie les adresses connues proches du point dfini par ses coordonnes gographiques (latitude et longitude exprimes en degrs). Le dernier paramtre permet de limiter la taille de la liste. getFromLocationName(String, int) renvoie les adresses connues proches dun point dfini par un nom (chane du type "parc Montaury, 64600, Anglet"). Le second paramtre permet de limiter la taille de cette liste. getFromLocationName(String, int, double, double, double, double) fonctionne comme la prcdente mais permet de limiter la zone de recherche un rectangle. longitude et latitude du coin infrieur gauche de ce rectangle et longitude et latitude du coin suprieur droit. Toutes ces mthodes renvoient une liste (classe List de java) contenant des objets de classe Address
Renvoie une liste ne contenant qu'un seul objet de classe Address dont le contenu est le suivant :
latitude : 43,4800424 longitude : -1,5093202 nom de lieu : Alle du Parc Montaury nom de ville : Anglet code postal : 64600 nom de pays : France Deux lignes d'adresse qui sont :
Alle du Parc Montaury 64600 Anglet
La classe Address
Construction
Address(Locale) le paramtre indique la zone gographique concerne, il peut prendre les valeurs (Locale.FRANCE, Locale.CANADA, Locale.UK, Locale.US ). Ce dernier paramtre peut tre omis si l'on ne souhaite pas limiter la localisation.
Contenu
getLatitude() renvoie la latitude en degrs (rel) getLongitude() renvoie la longitude en degrs (rel) getFeatureName() renvoie le nom du lieu getLocality() renvoie le nom de la ville getPostalCode() renvoie le code postal getCountryName() renvoie le nom du pays getAddressLine(int) renvoie la ligne d'adresse dsigne par son index pass en paramtre (en commenant 0). Renvoie null s'il n'y a rien correspondant l'index. On peut connatre le nombre de lignes d'adresse disponibles par la mthode : getMaxAddressLineIndex()
L'activit doit hriter de MapActivity Une seule carte est possible par activit L'activit doit surcharger la mthode :
protected boolean isRouteDisplayed() { return false; } Utilise pour les statistiques de Google
Obtention :
par la mthode getController() de l'objet MapView
Utilisation :
animateTo(GeoPoint) positionne la carte sur le point pass en paramtre en faisant une animation. La classe GeoPoint possde un constructeur acceptant en paramtres ses coordonnes gographiques en millionimes de degrs setCenter(GeoPoint) positionne la carte sur le point pass en paramtre sans faire d'animation. scrollBy(int , int) dplace la carte. Le premier paramtre exprime le dplacement horizontal (en pixels), le second le dplacement vertical. setZoom(int) dfinit le niveau de zoom zoomIn() zoome d'un niveau zoomOut() d-zoome d'un niveau
Utilisation :
fromPixels(int, int) renvoie un GeoPoint avec les coordonnes du point dsign par sa position en pixels dur la carte affich (x et y)
ATTENTION : GeoPoint utilise des coordonnes gographiques entires en millionimes de degr alors que le GPS travaille en coordonnes relles en degrs
Formatage du texte
SpannableStringBuilder
Les widgets contenant du texte hritent de TextView Les mthodes dajout de texte (setText et append) prennent en paramtre un CharSequence String hrite de CharSequence mais le format est alors celui associ au widget (dans le XML par exemple) Pour formater le texte on utilise SpannableStringBuilder qui hrite de CharSequence mais permet de dfinir zone par zone :
La police La taille Ltirement horizontal La couleur du fond et du texte Le style (gras, italique ) Le soulignement
Texte format
Cration dun texte formatable :
SpannableStringBuilder texte = new SpannableStringBuilder("chaine formater");
Les 2me et 3me paramtres de setSpan indiquent le point de dpart et de fin de la zone la chane de caractres laquelle le format est appliqu Format possibles (classes pour le premier paramtre) :
ForegroundColorSpan (int couleur) BackgroundColorSpan (int couleur) AbsoluteSizeSpan (int taille, boolean pixel_a_densit_dpendante) RelativeSizeSpan (double echelle) ScaleXSpan (float echelle) UnderlineSpan () TypeSpaceSpan (" {normal, sans, serif, monospace } " ) StyleSpan (android.graphics.Typeface.{BOLD, BOLD_ITALIC, ITALIC, NORMAL })
Et le reste ?
Beaucoup de choses ont t vues mais beaucoup ne lont pas t :
Ecriture de services Ecriture de fournisseurs de contenu Ecriture dcouteurs dintensions diffuses Interfaces onglets ou liste (une activit est associe chaque onglet ou lment de la liste) Cration de composants dinterface personnaliss Ecriture de pilotes permettant de modifier linterface depuis lextrieur de lactivit Animations des vues Persistance des donnes (SQLite) Communication par rseau (sockets , HTTP, SOAP, REST ) Srialisation (Parcelable , JSON) Graphisme en 2D et 3D (openGL) Utilisation du Bluetooth Internationalisation des applications