Sunteți pe pagina 1din 111

Dveloppement des applications

mobiles sous Android


Refs :
Introduction au Dveloppement dApplicationAndroid - AmosseEDOUARD,
INRIA/I3S - UNSA
Programmation Mobile Android Master CCI - Bertrand Estellon
Aix-Marseille Universit
Dveloppement sous Android Jean-Francois Lalande
www.openclassrooms.com - Frdric Espiau
https://developer.android.com/guide

Plan
2

1.Gnralits
2.Les Activits
3.Les Resources
4.Les IHMs
5.Les Intents
6.Les SQLite

Positionnement dAndroid

Gnralits

Android est un systme dexploitation OPEN


SOURCE pour terminaux mobiles (smartphones,
PDA, tablet, )
Conu la base par une startup (Android)
rachete par Google en 2005
Pour la promotion de ce systme Google a fdr
autour de lui une trentaine de partenaires runis
au sein de lOpen Handset Alliance (OHA)
Cest aujourdhui le systme dexploitation mobile
le plus utilis travers le monde

Android/Java
Le SDK Android est dvelopp en Java permet
de dvelopper des applications avec un haut
niveau dabstraction
Android a sa propre machine virtuelle (DVM)
Ne supporte pas toutes les fonctionnalits de la
JRE
Une application Android ne peut pas sexcuter
sur une machine virtuelle Java
Une application Java (native) ne peut pas
sexcuter sous Android
Android dispose de sa propre machine virtuelle

Android C/C++

Il est possible dcrire des applications


Android en utilisant le langage C/C++ qui
seront excutes directement par le systme
dexploitation Linux embarqu

Android

fournit le kit de dveloppement NDK


pour les dveloppements dapplication en C/
C++

Utilis

dans le dveloppement de jeux 2D/3D


se basant fortement sur la librairie OpenGL
6

Outils SDK

ADB : Outil en ligne de commande permettant


dadministrer un terminal (virtuel, rel) :
Transfrer 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 dune application
Android pour constituer une archieve (.apk)
directement installable sous un terminal Android
DDMS / Monitor : Monitoring sur les activits du
terminale

Architecture Android

Systme dexploitation bas sur le noyau de Linux,


conu pour lenv. mobile ce nest une distribution!
Il soccupe de la gestion :
-du processeur et ordonnancement entre taches
-Accs la mmoire, drivers,..
Couche dabstraction entre software hardware !
8

Architecture Android
Librairies Java crites en C/C++
Surface Manager: Display
Media Framework: audio/video
Webkit : web browser
OpenGL ES, SGL: Graphiques 2D, 3D
SQLite: SGBD
SSL: secure sockets layer

Architecture Android
Core Libraries : des classes Java standard du sdk:
android.* , junit.*, Org.json, org.xml,
Mais pas Toutes les classes du sdk !
Dalvik VM : Machine virtuelle optimis et adapt
aux contraintes des ressources systme, gnre
lex. partir dun bytecode specifique

10

Framework Java
Activity Manger: Cycle de vie des activits. Assure
le multi tche.
Content Providers: Partage les donnes entre
processus.
Telephony Manger: fournit laccs aux services
GSM, 3G, GPRS.
Location Manger: GPS.

Architecture Android

11

Compilation dun programme


standard en Java

12

Compilation dun programme Java


Android

13

Les Phases dune application


Android

Type de projets Android


Il existe trois catgoriesde projets sous Android:
Application Android : Type primaire des
applications Android destines tre executes
directement sur un terminal
Test Projects : Projetde test dune application
Android
Library project : Projet de types librairies,
equivalents une API exposant certaines
fonctionnalits rutilisables.
15

Type dapplications Android


Application de premier plan: cest une
application qui est utilisable uniquement
lorsquelle est visible et mise en suspens
lorsquelle ne lest pas.

.Application darrire plan (Services):


Ninteragit pas avec lutilisateur, elle sexcute
en tche de fond.

16

Type dapplications Android


Intermittente: cest une application qui
prsente une certaine interactivit mais effectue
lessentiel de sa tche en arrire plan. Ces
applications notifient lutilisateur lorsque cela
est ncessaire.
Widget: ces applications reprsentes sous
forme dun widget de lcran daccueil.

17

Rpertoires dun projet Android


bin/: Rpertoire qui contient lApplication
compile.
gen/: Rpertoire regroupe le code source
produit par les outils de compilation Android.
libs/: Rpertoire des fichiers JAR extrieurs de
lapplication .
res/: Rpertoire qui contient les ressources
utilises par lapplication (images, layouts,).
18

Rpertoires dun projet Android


src/: Rpertoire qui regroupes la ou les activits
de lapplication.
AndroidManiffest.xml: cest un fichier qui dcrit
lapplication.
assets/: Rpertoire qui contient les autres
fichiers statiques fournis avec lApplication pour
son dploiement sur le terminal

19

Rpertoires dun projet Android

20

Ressources

21

Ressources et valeurs
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Mon application</string>
<string name="server_url">http://mon.serveur.com</
string>
<integer-array name=codes_postaux>
<item>64100</item>
<item>33000</item>
</integer-array>
<string-array name= planetes>
<item>Mercure</item>
<item>Venus</item>
</string-array>
<dimen name taille>55px</dimen>
</resources>
22

Class R
Lensemble ressources sont modliss par la classe R.java et les
sous dossiers par des classes internes R
Chaque ressource est un attribut de la classe reprsentant le sous
dossier dans lequel il est dclar

23

Rfrencer les ressources

24

Rfrencer les ressources


Accder aux vues :
getResources().getLayout(R.layout.nom_layout);

} Accder

aux valeurs :

String chaine = getResources().getString (R.string.nom_string);


String[] tableau= getResources(). getStringArray(R.string.nom_array);

} Accder

aux images :

Drawable monImage =
getResources().getDrawable(R.drawable.nom_image)

25

Rfrencer les ressources


Rfrencement dune ressource dans une
autre ressource. La forme gnrale est :

"@type/identificateur"
Exemple :
@string/string_name
@drawable/icon
@color/ma_couleur

26

Structure dune app. Android


(Composants Java)

Activit (android.app.Activity) : Programme qui


gre une interface graphique
Service (android.app.Service) : Programme qui
fonctionne en tche de fond sans interface
Fournisseur de contenu
(android.content.ContentProvider) :
Partage dinformations entre applications
Ecouteur dintention diffuses
(android.content.BroadcastReceiver) :
27

Structure dune app. Android


(Composants Java)

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
28

AndroidManifest.xml
Chaque application doit avoir un fichier
AndroidManifest.xml dans son rpertoire racine.
Le fichier manifeste prsente des informations
essentielles propos votre application pour le
systme Android
Le manifeste effectue les oprations suivantes :

29

AndroidManifest.xml
Il nomme le paquet Java pour l'application(son
identifiant unique)
Il dcrit les composants de l'application - les
activits, les services, rcepteurs de
radiodiffusion, et les fournisseurs de contenu
qui constituent l'application.
Il nomme les classes qui implmentent
chacune des composantes et publie leurs
capacits (intentions).
30

AndroidManifest.xml
Il dclare les autorisations dont l'application
doit avoir pour accder des parties protges
de l'API et d'interagir avec d'autres applications.
Il dclare aussi les autorisations qui sont
ncessaires pour d'autres avoir pour interagir
avec les composants de l'application.
Il dclare que le niveau minimum de l'API
Android, la liste des bibliothques que
l'application ncessite
31

AndroidManifest.xml
<manifest>
<uses-permission />
<permission />
<permission-tree />
<permission-group />
<instrumentation />
<uses-sdk />
<uses-configuration />
<uses-feature />
<supports-screens />
<compatible-screens />
<supports-gl-texture />
<application>
<uses-library />
<activity>
<intent-filter>
<action />
<category />
<data />
</intent-filter>
<meta-data />
</activity>

32

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 tlphone, prendre une
photo, envoyer un email, ou afficher une carte.
Chaque activit est donne une fentre dans
laquelle dessiner son interface utilisateur.

33

Activit
Une application est gnralement constitu de
plusieurs activits qui sont faiblement lis entre
eux.
Chaque activit peut alors dmarrer une autre
activit afin d'effectuer diffrentes actions.
Chaque fois que commence une nouvelle
activit, l'activit prcdente est arrt, mais le
systme conserve l'activit dans une pile.
34

Activit
Classe hritant de la classe Activity dAndroid
Doit tre dclare dans le Manifest pour tre
visible par le systme
Ne peut tre instancie directement, cette
tache se fait par le systme
Activity a = new Activity();
Linstanciation dune activit se fait par les
intentions
35

Cycle de vie

36

Cration dune 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").
}
}

37

Cration dune activit

38

Cration dune activit

39

Sauvegarder ltat dune activit

40

Sauvegarder ltat dune activit

41

Sauvegarder ltat dune activit

42

Sauvegarder ltat dune activit


Mthodes du Bundle

43

Les IHM
Les interfaces sont dfinies gnralement
dans des fichiers XML (cela nous vite
davoir crer des instances
explicitement)
ADT gnre automatiquement une
ressource correspondant linterface dans
le fichier R.java (
accueil.xml ! R.layout.accueil )

Une interface peut tre associe comme


vue graphique une activit.
44

Les IHM
La dune interface avec lutilisateur :
Les interfaces sont composes dobjets tendant
View et ViewGroup ;
Une vue se dessine et permet les interactions avec
lutilisateur ;
Un groupe de vues contient dautres vues ;

Un groupe de vues organise laffichage des vues quil


contient ;
45

View/ViewGroup

46

View
View :Cette classe reprsente 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 vnements. Voir est la classe de base
pour les widgets, qui sont utiliss pour crer 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 dtiennent d'autres vues (ou
une autre vue Groupes) et dfinir leurs proprits de mise en page.

47

ViewGroup

Un ViewGroup est une vue spcial qui peut contenir d'autres vues (appels enfants.)
Le groupe de vue est la classe de base pour les modles et vues conteneurs. Cette
classe dfinit galement la classe ViewGroup.LayoutParams qui sert de classe de base
pour les paramtres de mises en page.

48

Exemple

Pour dclarer votre mise en page, vous pouvez instancier Afficher les objets
dans le code et de commencer construire un arbre, mais le moyen le plus
simple et le plus efficace pour dfinir votre mise en page est avec un fichier
XML.
Le nom d'un lment XML pour une vue est celui de la classe qu'il reprsente.
<TextView> lment cre un widget TextView
<LinearLayout> cre un lment de viewgroup LinearLayout.
Une disposition verticale simple avec une vue de texte et un bouton ressemble
ceci:

49

Cration

50

Cration

51

Instanciation

52

Contenu

53

Evnements

54

Validations

55

Proprits 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 ncessitele contenu

android:background: "@color/blue/#000FFFF"
android:visibility : visible / invisible/gone
android:padding="10.5dp"

56

EditText (View)

57

CheckBox (View)

58

ViewGroup

59

ViewGroup

60

Adapter

61

Adapter

62

RadioButton (View) et
RadioGroup (ViewGroup)

63

RadioButton et RadioGroup

64

Spinner (ViewGroup)
Dclaration dun spinner :

65

ListView (ViewGroup)
Au sein d'un gabarit, on peut implanter une
liste que l'on pourra drouler si le nombre
d'lments est
important. Si l'on souhaite faire une liste
plein cran, il suffit juste de poser un layout
linaire et d'y
implanter une ListView. Le XML du gabarit
est donc:

66

ListView (ViewGroup)

67

ListView (ViewGroup)

68

Menu
Un menu est un endroit privilgi pour placer certaines fonctions tout en
conomisant l'espace dans la Fentre.
Il existe deux sortes de menu dans Android :
-Le menu d'options : celui qu'on peut ouvrir avec le bouton Menu sur le
tlphone. Si le tlphone est dpourvu de cette touche, Android fournit un
bouton dans son interface graphique pour y accder.
-Les menus contextuels : Similaires aux menus qui s'ouvrent l'aide d'un clic
droit sous Windows et Linux, dans Android ils se droulent qu'on effectue un
long clic sur un lment de l'interface graphique.

69

Menu
Pour qu'une activit puisse avoir un menu, elle doit redfinir sa mthode
onOptionsItemSelected(MenuItem item) qui d'execute lors du premier clique
sur le menu :

Afin que le menu puisse voluer avec l'application , il faut redfinir


la mthode qui s'execute juste avant l'affichage de emenu

70

Menu

71

Menu
Pour qu'une activit puisse avoir un menu, elle doit redfinir sa mthode
onOptionsItemSelected(MenuItem item) qui d'execute lors du premier clique
sur le menu :

Afin que le menu puisse voluer avec l'application , il faut redfinir


la mthode qui s'execute juste avant l'affichage de emenu

72

Conteneurs (ViewGroup)
Ce sont des vues permettant de dfinir une
prdisposition pour dautres vues quils
contiennent:
- FrameLayout
- AbsoluteLayout
- LinearLayout
- TableLayout

- RelativeLayout

73

Conteneurs (ViewGroup)
-

LinearLayout: dispose les lments de


faon linaire (vertical ou horizontal)

- RelativeLayout:

Dispose les vues enfants


les uns par rapport aux autres

- TableLayout:

disposition matricielle
(ref:table HTML)

74

Rutilisation du Layout
Rutilisation dinterfaces : Une interface peut
inclure une autre interface
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
>
<include
android:id="@+id/include01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
layout="@layout/acceuil"
>
</include>
</LinearLayout>

75

LinearLayout
Dfinit le positionnement linaire (horizontall ou vertical) des vues filles

<?xml
<LinearLayout

version="1.0"

encoding="utf-8"?>

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/textView1"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_nom"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="textPersonName"
<requestFocus
</EditText>
</LinearLayout>

>
/>

76

RelativeLayout
Positionner les lments de linterface les uns par rapport aux autres

<?xml version="1.0" encoding="utf-8"?>


<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"
android:layout_height="match_parent"

android:orientation= "horizontal"

<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/label_nom"
android:textAppearance="?android:attr/textAppearanceLarge"
<EditText
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"
<requestFocus
</EditText>
</RelativeLayout>

>
/>

77

/>

>

TableLayout
Tableau

de positionnement des vues en ligne


de TableRow (similaire au <table> <tr>
<td> de HTML)

TableRow

hrite de LinearLayout avec


alignement automatique des colonnes sur
chaque ligne

Proprits

de TableRow.LayoutParams

layout_column: indice de dpart de la colonne


( partir de 0)
layout_span: nombre de colonnes occupes
78

Communications entre
composants
Android offre un mcanisme puissant qui permet de faire
excuter certaines actions et de faire circuler des messages
entre applications ou l 'intrieur d'une mme application
Exemple : Dans votre application de gestion de personnels,
vous avez un bouton a cot les coordonnes qui permet
dappeler lemploy, vous aurez pas dvelopper une interface
pour passer lappel ! Vous allez demandez au systme de le
faire laide des Intent

79

Intent
Les intents facilitent la communication entre
diffrents composants. Trois cas de figure :
Pour dmarrer une activit (avec/sans attente de
rsultat
Pour dmarrer un service
Pour envoyer un BroadCast

80

Types d'Intents
Intent Explicite : On spcifie le compsant
destinataire qui va traiter l'intent (fullyqualified class name)
Intent Implicite : On ne spcifie pas le
composant, mais on offre suffisement
d'informations permettant au systeme de
trouver le bon composant capable de traiter
l'intent.
81

Intent Explicite

1 : Activit A cre un intent en prcisant le composant destinataire et le passe la


mthode startActivity().
2 : Le systeme trouve immediatement le composant prciser dans l'intent. (Activity
B)
3 : Le systeme dmarre l'activit B en appelant sa mthode onCreate() et lui passe
l'intent ru de l'activit A

82

Intent Implicite

1 : Activit A cre un intent avec juste une description del'action dsire et le passe
la mthode startActivity().
2 : Le systeme cherche dans les manifest.xml des applications existantes sur le
device,si le contenu de l'intent correspond un intent filter d'un composant, le
systeme le choisit.(B par exemple)
3 : Le systeme dmarre l'activit B en appelant sa mthode onCreate() et lui passe
l'intent ru de l'activit A
83

Intent
Techniquement, un intent est un objet de la forme :
Ce champ permet de dfinir le destinataire de
lIntent, celui qui devra le grer. Si ce champ est
donn, l'intent est alors explicite

84

Intent
Techniquement, un intent est un objet de la forme :

Action quon dsir excuter, appeler un numro,


envoyer email
Des constantes de classe Intent de la forme
ACTION_NomAction

85

Intent
Techniquement, un intent est un objet de la forme :

Les donnes que va traiter


destinataire , et leurs types
Sous forme d'URI

86

lapplication

Intent
Techniquement, un intent est un objet de la forme :
Information additionelle propos le type de
composant capable de traiter l'intent

87

Intent
Techniquement, un intent est un objet de la forme :

Les Extras servent transiter d'autes donnes


additionelles
Source :

Dest. :

88

Intent
Techniquement, un intent est un objet de la forme :

Les flags servent prciser comment le systeme


traitera le composant dest.
Ex : FLAG_ACTIVITY_NO_HISTORY
Si ce flag est prsent , l'app. Dest. Ne sera pas
gard dans l'historique si on la quitte.

89

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(MainActivity.this,
IntentExample.class);
// On rajoute un extra
secondeActivite.putExtra(AGE, 31);
// Puis on lance l'intent !
startActivity(secondeActivite);

90

Intent explicite avec retour


Si l'activit source attend des donnes qui proviennet de l'activit
destinataire, l'appel se fait ainsi l'aide de la mthode void
startActivityForResult(Intent intent, int requestCode)
RequestCode : identifiant unique de l'intent diffrent de 0
Quand l'activit appele s'arrtera, la premire mthode de callback
appele dans l'activit prcdente sera void
onActivityResult(int requestCode, int resultCode, Intent
data)
RequestCode : l'identifiant, reprer l'intent appelant 2eme activit
ResultCode : information sur l'tat d'achevement du 2eme activit ,
Activity.RESULT_OK si tout s'est bien droul
data: donnes attendues

91

Intent explicite avec retour


Dans la seconde activit, vous pouvez dfinir un rsultat avec la
mthode 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");

92

Exemples

93

Lancement dactivit laide


dIntent

94

Intent

95

SQLite

96

SQLite

97

SQLite

98

SQLite

99

SQLite

100

SQLite

101

SQLite

102

SQLite

103

SQLite

104

SQLite

105

SQLite

106

SQLite

107

SQLite

108

SQLite

109

SQLite

110

SQLite

111

S-ar putea să vă placă și