Tutorial : Les dossiers dynamiques ou Live Folder
Par Patrice le mercredi 6 mai 2009, 17:11 - Tutorial - Lien permanent
Un dossier dynamique est un raccourci sur le bureau qui affiche une liste ou une grille avec des informations dynamiques qui viennent d’une application. Cela peut être les derniers contacts appelés, les derniers favoris, etc …
Nous allons voir comment créer ces dossiers pour afficher nos derniers SMS. Pour cela, on va utiliser l’astuce décrite dans un précédent billet pour accèder aux SMS de l’application.
Il y a deux étapes, tout d’abord créer le dossier dynamique, enfin créer le contenu qui sera affiché.
Création du dossier Dynamique
La création d’un dossier dynamique est très simple, car cela fonctionne sur le système des Intent. Il faut commencer par créer une activité qui va s’occuper de créer ce dossier. Cette activité peut afficher des informations et en demander à l’utilisateur pour configurer le dossier. L’activité doit ensuite retourner un RESULT_OK en envoyant un Intent avec l’adresse du content provider pour afficher les données dans le champ Date et les paramètres du dossier dans les données extra :
- LiveFolders.EXTRA_LIVE_FOLDER_NAME : Le nom du dossier
- LiveFolders.EXTRA_LIVE_FOLDER_ICON : L’icône du fichier
- LiveFolders.EXTRA_LIVE_FOLDER_BASE_INTENT : L’Intent a appeler lors de la sélection d’un élément de la liste
- LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE : Le type d’affichage qui peut être mis à LiveFolders.DISPLAY_MODE_LIST pour un affichage en liste, ou à LiveFolders.DISPLAY_MODE_GRID pour un affichage en grille
Voici donc une fonction très simple pour créer l'Intent à retourner :
L'uri est l'url du content Provider qui donnera les informations pour remplir le dossier et le baseUri est l'url de base auquel est concaténé l'Id de celui-ci pour accéder à l'élément lorsqu'on le sélectionne.
Voilà nous pouvons maintenant faire une activité qui va juste retourner cette Intent :
Il faut maintenant déclarer cette activité dans le AndroidManifest.xml, il faut pour cela ajouter l'action CREATE_LIVE_FOLDER dans la liste des intents-filters pour qu'elle soit reconnue par le système comme une activité qui crée un dossier dynamique.
Voilà, la création du dossier est finie, si vous installez cette application, et que vous allez sur la page d’accueil, et vous cliquez sur le menu puis sur l’option “Ajouter”(Add) ou un clic long sur le fond d’écran, vous avez l’entrée “Dossiers” (Folders) qui affiche ensuite la liste des dossiers dynamiques, vous verrez votre dossier. Votre application se lance et retourne tout de suite l’Intent que vous avez créé, et aussitôt votre dossier apparaît sur la page d’accueil. En l’ouvrant, votre dossier plantera, car il nous faut encore créer le content Provider.
Content Provider :
Notre dossier dynamique retourne l’url du contenu, lors de l’ouverture du dossier, android va faire une requête à notre content provider (SMSContentProvider). Ce content provider doit retourner deux colonnes : LiveFolders._ID qui contient l’id de l’élèment et LiveFolders.NAME qui contient le nom de l’élément. On peut aussi retourner LiveFolders.DESCRIPTION pour afficher un texte en dessous ou LiveFolders.ICON_RESSOURCE pour afficher une icône. Comme le content provider de l’application SMS d’android ne retourne pas ses colonnes, nous devons créer notre content provider et à l’intérieur de celui-ci faire appel au content provider de l’application SMS.
Voici donc le code principal de notre content Provider :
Le reste de la classe contient les méthodes vides d’ajout, de mise à jour, et de suppression du contenu qui ne servent pas pour notre application mais qui sont obligatoires pour implémenter l’interface ContentProvider.
La méthode principale est la méthode query, nous commençons par vérifier que l’uri match bien avec notre UriMatcher. Puis nous appelons la methode query sur le ContentResolver qui va nous permettre de récupérer les données depuis le content provider de l’application SMS. Nous renommons les colonnes par les colonnes demandées par android et trions les résultats par date décroissante. Le MergeCursor est là à cause d’une limitation avec les curseurs entre plusieurs processus.
Pour la colonne _ID, nous utilisons le numéro de téléphone au lieu de l’ID du SMS car il n’est pas possible d’ouvrir l’application SMS pour afficher un SMS par un ID. Nous contournons cela en ouvrant l’application pour écrire un SMS au numéro de téléphone, ce qui a la particularité d’afficher la conversation avec ce contact au dessus du champ de saisie.
Voilà, maintenant, vous pouvez installer et tester votre dossier dynamique qui affichera vos SMS triés du plus récent au plus ancien.
Commentaires
Un blog est un journal personnel en effet mais surtout un lieu dechange et de partage d idees (tout comme je fais actuellement sur le sujet) Bref, Merci pour les tuyaux, cest tres enrichissant.