Vous êtes sur la page 1sur 33

Naoufel KHAYATI Cours « Développement Mobile »

Partie I : Android

209

Chapitre 6
Accès aux données
« Fichiers et BD »

KHAYATI Naoufel
AU. 2012 - 2013

PLAN
210

 Fichiers
 Fichiers locaux
 Fichiers partagés
 Fichiers comme Ressources

 Bases de Données SQLite


 Classe d’assistance
 Classe de Gestion ou d’adaptation

 Content Providers
 Côté Client
 Côté Fournisseur

ENISo – IA3.1 – Option ISD – 2012 / 2013 1


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

211

FICHIERS

Introduction
212

 En plus des API standards de Java, Android propose un ensemble de


classes offrant des méthodes permettant la gestion des données stockées
dans des fichiers ou dans des BD.

 Ces fichiers et BD sont, par défaut, locaux i.e. associés au contexte de


l’application, mais qui peuvent être externalisés.

 La classe de base Context qui permet l'accès à des ressources spécifiques


à l'application

 databaseList(), deleteFile(), getFileStreamPath(), etc.

 La classe Environment qui permet l’accès aux variables d’environnement


utilisées par Android.

 getDataDirectory (), getExternalStorageDirectory(), DIRECTORY_DCIM,


DIRECTORY_MOVIES, DIRECTORY_MUSIC, DIRECTORY_PICTURES, etc.

ENISo – IA3.1 – Option ISD – 2012 / 2013 2


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Fichiers Locaux
213

 Android propose deux méthodes pour accéder à des fichiers.

 La méthode openFileOutput : permet d’ouvrir le fichier en écriture.


 Si le fichier n’existe pas, il sera créé.
 Si le fichier existe, son contenu sera écrasé.

 La méthode openFileInput : permet d’ouvrir le fichier en lecture.

 Ces méthodes ne prennent en charge que les noms de fichiers


localisés dans le répertoire par défaut de l’application (/data).

 On ne peut pas spécifier des chemins.

Fichiers Locaux
214

 Android propose plusieurs autres méthodes


utilitaires pour manipuler les fichiers depuis le
contexte de l’application :

 fileList () : liste tous les fichiers locaux de l’application ;

 deleteFile () : supprime le fichier spécifié.

ENISo – IA3.1 – Option ISD – 2012 / 2013 3


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Fichiers Locaux
215

 getFilesDir () : permet d’obtenir le chemin absolu du


répertoire dans le système de fichiers où tous les
fichiers créés avec openFileOutput () sont stockés.

 getFileStreamPath () : retourne le chemin absolu du


fichier spécifié en argument et qui est créé avec
openFileOutput.

Fichiers Locaux
216

Ecriture

Lecture

ENISo – IA3.1 – Option ISD – 2012 / 2013 4


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Fichiers Locaux
217

Modes d’Accès

 MODE_PRIVATE : Par défaut, les fichiers créés par la méthode


openFileOutput sont restreints à l’application.

 Cette constante représentant le mode par défaut vaut 0.


 Ce mode signifie que le fichier créé sera accessible uniquement à
l’application l’ayant créé ;
 Toute tentative d’accès aux fichiers locaux d’une application externe
sera refusée.

 MODE_APPEND permet d’écrire les données en fin de fichier sans


écrasement.

 Cette constante vaut 32768.

Fichiers Partagés
218

 Afin de permettre aux autres applications d’accéder aux fichiers


locaux, on peut spécifier des permissions sous forme de nouveaux
modes d’accès.

 MODE_WORLD_READABLE, vaut 1 et permet aux autres applications


de lire le fichier ;

 MODE_WORLD_WRITEABLE vaut 2 et permet aux autres applications


de modifier le fichier ;

 La constante MODE_APPEND peut être combinée avec les autres.

 MODE_PRIVATE | MODE_APPEND
 MODE_WORLD_WRITEABLE | MODE_APPEND
 MODE_WORLD_READABLE | MODE_APPEND

ENISo – IA3.1 – Option ISD – 2012 / 2013 5


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Fichiers comme Ressources


219

 On peut intégrer les fichiers comme ressources dans


les applications.
 Pour embarquer des données, on doit placer les
ressources brutes dans le répertoire res/raw du projet.

 Les fichiers embarqués seront accessibles en lecture


seule par l’application via la méthode
openRawResource grâce aux ressources.

Fichiers comme Ressources


220

ENISo – IA3.1 – Option ISD – 2012 / 2013 6


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Vers les Content-Providers


221

 Deux points importants :

 L’utilisation des fichiers (embarqués) dans une application


Android est souvent déconseillé.

 Il vaut mieux alléger l'application au maximum et prévoir le


téléchargement de ressources nécessaires et l'utilisation de
fournisseurs de contenu (à voir ultérieurement).

 Si on veut partager un fichier avec une autre application, la


bonne pratique est l’utilisation d’un fournisseur de contenu.

 Ce dernier offrira plus de sécurité et de contrôle sur les données


exposées.

222

Bases
de
Données

ENISo – IA3.1 – Option ISD – 2012 / 2013 7


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

BD SQLite
223

 Android s’est doté d’un SGBD conçu pour être


suffisamment léger et compact pour tourner sur des
environnements aux capacités réduites.
 SQLite.
 Utilisé aussiavec Skype, Firefox, etc.
 Très efficace pour les applications embarquées.

 l’objectif est de faire persister des données


localement sur le terminal.

BD SQLite
224

 Contrairement aux SGBDs habituels, SQLite ne


nécessite pas de serveur pour fonctionner.

 Son exécution se fait dans le même processus que celui


de l'application.

 Une opération massive lancée sur la BD pourrait


nuire aux performances de l’application.

 Il faut savoir maîtriser son implémentation.

ENISo – IA3.1 – Option ISD – 2012 / 2013 8


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

BD SQLite
225

 Chaque application Android peut avoir sa propre BD.

 Il est possible d'avoir plusieurs BD par application.

 Généralement, les BD sont stockées dans les répertoires de la forme


/data/data/<package>/databases/nom.db

 Chaque base est créée par défaut selon le mode MODE_PRIVATE.


 Elle ne sera accessible qu'au sein de l'application elle-même.

 Pour interagir avec SQLite, il faut avoir recours aux classes


android.database.*.
 android.database
 android.database.sqlite

Définition d’une BD – « Classe d’assistance »


226

 Fournir une implémentation concrète de la classe


SQLiteOpenHelper.

 Une classe d'assistance pour gérer la création de BD et pour


gérer les versions.
 Elle prend soin d'ouvrir la BD si elle existe, de la créer si elle
n'existe pas et passer d’une version à une autre si nécessaire .

 Créer une sous-classe implémentant des méthodes abstraites


ou non :

 onCreate ().
 onUpgrade().
 onOpen().
 etc.

ENISo – IA3.1 – Option ISD – 2012 / 2013 9


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Définition d’une BD – « Classe d’assistance »


227

 Appelée automatiquement lorsque la BD sera créée pour la


première fois.
 C'est là que la création de tables et de la population initiale des
tables devrait se produire.

 Appelée lorsque la base de données doit être mise à jour pour


passer à la nouvelle version du schéma.
 Elle s'exécute dans une transaction.
 Si une exception est levée, toutes les modifications seront
automatiquement annulées.

Définition d’une BD – « Classe d’assistance »


228

 Appelée lorsque la base de données doit être rétrogradée.

 Appelée à chaque fois que la version actuelle est plus récente


que celle demandée.

 Elle n'est pas abstraite : il n'est donc pas obligatoire de


l’implémenter.
 L’implémentation par défaut rejettera toute opération de
rétrogradation.

 Elle s'exécute dans une transaction.

ENISo – IA3.1 – Option ISD – 2012 / 2013 10


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Définition d’une BD – « Classe d’assistance »


229

 Appelée lorsque la BD a été ouverte.

 Appelée après avoir :


 Configuré la connexion à la base
 Créé le schéma de base
 Mis à jour la base en Upgrade ou Downgrade.

 Si la connexion à la base doit être configurée d'une


certaine façon avant que le schéma ne soit créé, mis à jour
ou rétrogradé, il faut utiliser onConfigure ().

Définition d’une BD – « Classe d’assistance »


230

 Appelée lorsque la connexion sera configurée pour


permettre des fonctionnalités telles que « Write-Ahead
Logging » ou « Foreign Key Support ».

 Appelée avant toutes les autres méthodes.

 Elle ne doit appeler que des méthodes qui permettent


de configurer les paramètres de la connexion.

ENISo – IA3.1 – Option ISD – 2012 / 2013 11


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Création de Tables – « Classe d’assistance »


231

 La création d’une table se fait avec la syntaxe SQL


habituelle :

 execSQL () : exécute une instruction SQL qui ne retourne


pas des données ou que ces dernières peuvent être
ignorées.
 Ni SELECT, ni INSERT INTO, ni DELETE FROM, etc.

Création de Tables – « Classe d’assistance »


232

 Il est possible de définir des contraintes pour


chaque attribut, par exemple :

ENISo – IA3.1 – Option ISD – 2012 / 2013 12


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Upgrade de BD – « Classe d’assistance »


233

 En général, le contenu de la méthode onUpgrade()


est assez constant puisqu'on se contente de :

 Supprimer les tables déjà existantes.


 Les reconstruire suivant le nouveau schéma.

Manipulation d’une BD – « Classe de gestion »


234

 Il est plus propre de créer et d’utiliser une classe


spécifique pour la gestion des données de la base.

 C’est une classe d’adaptation qui joue le rôle d’un DAO.

 C’est une classe incluant au moins les méthodes CRUD


(Create – Request – Update – Delete).

 on instancie dedans la classe d’assistance,


 on l’ouvre, et
 on récupère un objet SQLiteDatabase sur lequel on applique les
méthodes CRUD.

ENISo – IA3.1 – Option ISD – 2012 / 2013 13


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Récupération d’une BD – « Classe de gestion »


235

 Cette méthode récupère une BD sur laquelle on veut lire et/ou écrire.

 À son 1er appel, les méthodes onCreate() et / ou onUpgrade() et / ou


onDowngrade() et /ou onOpen() sont invoquées.

 L'objet SQLiteDatabase fourni est un objet en cache, constant.


 Si des opérations se déroulent sur la base après sa récupération on ne les
verra pas sur l'objet.
 Il faudra donc en recréer un autre pour avoir le nouvel état de la base.

 Il faut s’assurer de fermer la connexion à la fin des traitements grâce à la


méthode close ().

Récupération d’une BD – « Classe de gestion »


236

 Avec getWritableDatabase(), si la base ne peut pas


être ouverte en écriture, une exception de type
SQLiteException sera lancée.

 On peut dans ce cas, utiliser en priorité


getReadableDatabase().

ENISo – IA3.1 – Option ISD – 2012 / 2013 14


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – Sélection – « Classe de gestion »


237

 Une requête de sélection peut être exécutée via la


méthode query() sur l’objet SQLiteDatabase retourné
par l’une des méthodes de récupération.

 La méthode query() retourne un objet de type Cursor.


 Ce curseur permet de naviguer dans le résultat et de traiter
la réponse (en lecture ou écriture).

 La méthode query() accepte jusqu’à 9 arguments


comme suit :

Requêtes – Sélection – « Classe de gestion »


238

 distinct : un booléen spécifiant si le résultat doit


contenir ou non des éléments uniques.

 table : une chaine de caractères spécifiant le nom


de la table à interroger.

 columns : un tableau de chaines de caractères


spécifiant les colonnes de projection de la requête.
 La valeur null signifie que toutes les colonnes de la
table seront retournées.

ENISo – IA3.1 – Option ISD – 2012 / 2013 15


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – Sélection – « Classe de gestion »


239

 selection : une chaine de caractères spécifiant la clause


WHERE de la requête.
 La valeur null signifie qu’aucune clause WHERE ne sera
appliquée.
 Les valeurs '?' signifient que chacune sera remplacée par la
valeur spécifiée dans le paramètre selectionArgs.

 selectionArgs : un tableau de chaines de caractères


spécifiant les valeurs de remplacement des '?' dans le
paramètre selection dans l’ordre d’apparition.

 groupBy : une chaine de caractères spécifiant un filtre de


regroupement des lignes

Requêtes – Sélection – « Classe de gestion »


240

 having : une chaine de caractères spécifiant un filtre de


condition d’apparition des lignes en relation avec le
paramètre groupBy.
 La valeur null signifie que toutes les lignes seront incluses dans le
résultat.
 La valeur null est requise si la valeur du paramètre groupBy est
également null.

 orderBy : une chaine de caractères spécifiant l’ordre de tri


des lignes.

 limit : une chaine de caractères limitant le nombre de lignes


retournées par la requête.
 La valeur null signifie que toutes les lignes seront retournées.

ENISo – IA3.1 – Option ISD – 2012 / 2013 16


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – Sélection – « Classe de gestion »


241

 Récupérer un enregistrement en fonction de son nom.

 Récupérer un enregistrement en fonction de son id.

 Retourner tous les enregistrements de la table.

Requêtes – Sélection – « Classe de gestion »


242

 Les méthodes de navigation de la classe Cursor.

 Toutes ces méthodes retournent des booléens.

ENISo – IA3.1 – Option ISD – 2012 / 2013 17


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – Sélection – « Classe de gestion »


243

 Quelques méthodes d’information de la classe Cursor.

Requêtes – Sélection – « Classe de gestion »


244

 Méthodes d’extraction de valeurs d’un curseur.

ENISo – IA3.1 – Option ISD – 2012 / 2013 18


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – Insertion – « Classe de gestion »


245

 Utiliser la méthode insert() de la classe SQLiteDatabase.

 values est un objet de type ContentValues spécifiant les


valeurs de la ligne à insérer.

 Cet objet stocke les valeurs de chaque colonne de la ligne à


insérer sous la forme d’une collection d’associations entre le
nom de la colonne et sa valeur.

 Retourne l’identifiant de la ligne insérée ou -1 si une erreur


se présente.

Requêtes – Insertion – « Classe de gestion »


246

 On peut aussi utiliser la méthode execSQL() en


spécifiant une requête SQL INSERT pour arriver au
même résultat.

ENISo – IA3.1 – Option ISD – 2012 / 2013 19


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Requêtes – MAJ – « Classe de gestion »


247

 Utiliser la méthode update() de la classe


SQLiteDatabase en spécifiant :
 un objet ContentValues contenant les nouvelles valeurs,
 la clause de condition WHERE.

 Il est possible d’utiliser une requête SQL UPDATE


pour arriver au même résultat.

Requêtes – Suppression – « Classe de gestion »


248

 Utiliser la méthode delete() de la classe


SQLiteDatabase en spécifiant :
 le nom de la table
 le critère permettant à la base d’identifier les éléments à
supprimer.

 Il est possible d’utiliser une requête SQL DELETE pour


arriver au même résultat.

ENISo – IA3.1 – Option ISD – 2012 / 2013 20


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

BD et Activités Android
249

 Créer une interface de manipulation de la BD.


 Instancier la classe de gestion et utiliser les méthodes
déjà créées dedans.
 Exemple :
 Contact c = new Contact (zoneNom.getText().toString(),
zoneTel.getText().toString());
 ContactsAdapter BDContacts = new ContactsAdapter (this);
 BDContacts.open();
 BDContacts.insertContact(c);
 BDContacts.updateContact(…);
 BDContacts.removeContactByName(…);

Vers les Content-Providers


250

 Les données gérées sous forme de fichiers ou de bases de


données résident dans un espace privé à l’application les
ayant créées.

 Limite des applications utilisant des bases de données qui leurs


sont propres et donc non partageables entre programmes.

 Il est intéressant de partager les données avec d’autres


applications.
 Les applications d’Android : gestion des contacts, des photos, des
fichiers son, etc. offrent la possibilité de partager des données.

 La solution de partage des données entre applications est


l’utilisation des Content-Providers.

ENISo – IA3.1 – Option ISD – 2012 / 2013 21


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

251

Fournisseurs
de
Contenu

Content Providers
252

 Un exemple simple et courant est de pouvoir consulter les contacts de


l'utilisateur qui sont enregistrés dans l’application Carnet d'adresses.

 Techniquement, un Content Provider est découpé en deux éléments


distincts :

 Un fournisseur de contenu, qui sera utilisé dans l'application qui distribue


son contenu aux autres applications.
 Un client, qui permettra aux autres applications de demander au
fournisseur les informations voulues.

 Ils offrent une interface standardisée permettant l'échange sécurisé


de données, ainsi que les communications interprocessus, de façon à
faciliter les transactions entre applications.

ENISo – IA3.1 – Option ISD – 2012 / 2013 22


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Côté Client
253

Accès à des fournisseurs (1)

 Les fournisseurs de contenu permettent l'encapsulation de données,


et, pour accéder à ces données, il faudra utiliser les URI.
 On ne sait pas où ni comment les données sont stockées, mais quand
même les données sont mises à disposition des utilisateurs.
 Quel que soit le type de stockage, les données sont toujours présentées
de la même manière.

 Un fournisseur de contenu présente les données à une application


extérieure dans une ou plusieurs tables.
 Chaque entrée dans la table est représentée dans une ligne et chaque
colonne représente un attribut.
 Avant de faire appel à un fournisseur de contenu, on doit savoir à
l’avance la structure de ces tables.
 Une information fournie par le développeur du Provider.

Côté Client
254

Accès à des fournisseurs (2)

 Il est possible d'accéder aux données d'une autre


application avec un objet client ContentResolver.

 Cet objet a des méthodes qui appellent d'autres


méthodes, qui ont le même nom, mais qui se trouvent
dans un objet ContentProvider, c'est-à-dire l'objet qui
met à disposition le contenu pour les autres
applications.

ENISo – IA3.1 – Option ISD – 2012 / 2013 23


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Côté Client
255

 Le ContentResolver fournit des méthodes CRUD.


 Exp. Si un ContentResolver demande à un ContentProvider de lire des
entrées dans la BD de l'application gérée par ce dernier, il appellera
sur lui-même une méthode M afin d’appeler la même méthode M sur le
ContentProvider.

 Le rôle du ContentResolver est d’identifier le bon ContentProvider


en fonction de l’URI qui lui est passé en paramètre.
 Les méthodes de manipulation des objets stockés du ContentResolver
acceptent toutes une URI en paramètre (Lecture ou en écriture).

 Pour récupérer le gestionnaire des fournisseurs de contenu, on utilise


la méthode :
 ContentResolver getContentResolver () de la classe Context.

Côté Client
256

L'URI des fournisseurs de contenu

 Le schéma d'une URI qui représente un fournisseur de contenu est


content.
 Ce type d'URI commence par content://.

 Après le schéma, on trouve un chemin hiérarchique : plus on rajoute


d'informations, plus on devient précis sur le contenu voulu.
 Un chemin permet d'affiner la sélection et de choisir une table, un fichier ou
encore une ligne dans une table.
 Les éléments du chemin sont dits segments et sont séparés par des « / ».
 Le premier segment du chemin s'appelle l'autorité.

 Une autorité est utilisée en tant qu'identifiant unique afin de pouvoir


différencier les fournisseurs dans le registre des fournisseurs que tient
Android.

ENISo – IA3.1 – Option ISD – 2012 / 2013 24


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Côté Client
257

 Par exemple, la classe ContactsContract sert à accéder aux


données associées aux contacts enregistrés dans le téléphone.

 Elle possède plusieurs tables :

 ContactsContract.Data : contient toutes les données sur les contacts


(numéros de téléphone, adresses e-mail, comptes Facebook, etc.).

 ContactsContract.RawContacts : une ligne de cette table représente un


ensemble de données décrivant une personne associée à un compte (par
exemple, compte Gmail).

 ContactsContract.Contacts : fait le lien entre les deux autres tables, i.e.


elle lie un contact à ses données personnelles.

Côté Client
258

 Pour accéder à ContactsContract, on peut utiliser l'URI


« content://com.android.contacts/ ».

 Pour accéder uniquement à la table Contact, on peut


utiliser l'URI :
« content://com.android.contacts/contact ».

 On peut raffiner encore la recherche en ajoutant un


autre segment qui indiquera l'identifiant du contact
recherché :
« content://com.android.contacts/contact/3 ».

ENISo – IA3.1 – Option ISD – 2012 / 2013 25


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Côté Client
259

 Ce qui est noté au niveau de l’autorité représente le


nom du package de l’application.
 Ce dernier est ajouté dans la section « provider » du
fichier manifeste de l’application qui déploie le
provider.

 Google a opté pour un autre choix : Raccourcir les


URI d’accès aux providers standard d’Android.
« content://contacts ».
 « content://contacts/people».

Côté Client
260

 Android possède nativement un certain nombre de


fournisseurs de contenus qui sont décrits dans
« android.provider ».

 On trouve parmi ces fournisseurs, des contacts, des appels,


des médias, etc.

 Chacune de ces classes possède une constante appelée


CONTENT_URI qui est en fait l'URI pour accéder au content
provider qu'elles représentent.

 Pour accéder au fournisseur de contenu de


ContactsContract.Contacts, on pourra utiliser l'URI
ContactsContract.Contacts.CONTENT_URI.

ENISo – IA3.1 – Option ISD – 2012 / 2013 26


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Côté Client
261

Exemple pour l’ajout de données

 Permet d'insérer une valeur avec un ContentValues.


 L'URI retourné représente la nouvelle ligne insérée.

 Pour la récupération, la modification et la suppression


d’enregistrements, c’est pareil.
 Pareil à ce qui a été fait avec les BD, mais avec plus ou
moins de paramètres.

Exemples
262

 Lister tous les contacts à partir du content provider


« Contacts »

ENISo – IA3.1 – Option ISD – 2012 / 2013 27


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Exemples
263

 Lister tous les contacts à partir du content provider


« ContactsContract »

Exemples
264

 Insérer un contact au répertoire

phoneUri =

personUri

ENISo – IA3.1 – Option ISD – 2012 / 2013 28


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Coté Fournisseur
265

Créer un fournisseur (1)

 Créer une classe héritière de ContentProvider.


 Cette classe doit implémenter les 6 méthodes suivantes :

 onCreate() : Appelée afin d’initialiser le Content Provider.


 query() : retourne un objet Cursor sur lequel on peut itérer pour
récupérer les données.
 insert() : utilisée pour ajouter des données au Content Provider.
 update() : utilisée pour mettre à jour une donnée déjà existante
dans le Content Provider.
 delete() : permet de supprimer une donnée du Content Provider.
 getType() : retourne le type MIME des données contenues dans le
Content Provider.

Coté Fournisseur
266

ENISo – IA3.1 – Option ISD – 2012 / 2013 29


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Coté Fournisseur – onCreate()


267

 Le point d’entrée principal d’un fournisseur de contenu.

 On réalise dedans des opérations d’initialisation


 Exp. Répertoire de stockage (dans une carte SD, mémoire
interne).

 On vérifie que ce répertoire existe et, dans le cas contraire,


on le créera.

 On teste si la BD SQLite existe ou non.

Coté Fournisseur – getType()


268

 Prend une Uri en paramètre et renvoie le type MIME qui


lui est associé.

 Type MIME ?
 Un identifiant de format de données sur Internet.
 Composé d’au moins deux parties : type et sous-type.
 application/pdf - application/xml - application/msword
 audio/mpeg audio/x-wav
 image/gif image/jpeg
 text/html text/plain text/xml
 Application/vnd.ms-powerpoint
 VND = Variable Node Decoder

ENISo – IA3.1 – Option ISD – 2012 / 2013 30


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Coté Fournisseur – getType()


269

 Cette Uri peut désigner une collection ou une instance.


 On doit la tester pour renvoyer le type MIME
correspondant.

Coté Fournisseur
270

Créer un fournisseur (2)

 On doit, en 2ème lieu, fournir une Uri comme un membre


public statique contenant l’Uri de chaque collection
supportée par le fournisseur de contenu.

 Généralement, on définit cette Uri dans la classe du


fournisseur lui-même.

ENISo – IA3.1 – Option ISD – 2012 / 2013 31


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Coté Fournisseur
271

Créer un fournisseur (3)

 Il est conseillé de déclarer les attributs du fournisseur


dans une classe publique statique implémentant
l’interface BaseColumns.

 les valeurs de ces constantes doivent être les noms des


colonnes respectives de la table de la BD.

Coté Fournisseur
272

Créer un fournisseur (4)

 Chaque fournisseur de contenu s'enregistre sur un


appareil à l'aide du Manifest.

 Déclarer ce Content Provider dans le manifest de


l’application Android.

ENISo – IA3.1 – Option ISD – 2012 / 2013 32


Naoufel KHAYATI Cours « Développement Mobile »
Partie I : Android

Coté Fournisseur
273

 La propriété android:name est le nom de la classe du


fournisseur de contenu, préfixé par un point pour
indiquer qu’il se trouve dans l’espace de noms des
classes de cette application.

 La propriété android:authorities est une liste


d’autorités reconnues par le fournisseur, séparées par
des points-virgules.

 Chaque autorité de toute valeur CONTENT_URI devrait être


incluse dans la liste android:authorities.

En Résumé
274

Les fournisseurs de contenu sont indispensables si on


souhaite partager des données avec d’autres
applications.

MAIS, Ne construire un fournisseur que si nécessaire


puisqu’il ne s’agit pas d’une tâche triviale.

ENISo – IA3.1 – Option ISD – 2012 / 2013 33

Vous aimerez peut-être aussi