Goufablog

Geek, nouvelles technologies, société et jeux vidéos!
20
févr.
2012
Programmer un suivi de consommation téléphonique sous Android
Android - par Goufalite - 1970 hits


Alors combien il me reste sur mon forfait? #123# "Orange bonjour! Le 04/03/2006 il vous restait 26 minutes de forfait." Après on s'étonne de faire du hors forfait tout les mois. J'ai fouillé un peu sur le Net (tant qu'on peut encore) et j'ai vu qu'il était assez facile de récupérer l'historique d'appel du téléphone pour connaître les durées d'appels en fonction des jours. C'est parti!

Pré-requis

Bien entendu installer tout l'environnement de dev Android, mettre à jour les SDKs via l'interface qu'il faut et créer un nouveau projet avec les permissions Android.permission.READ_CONTACTS. Vous pouvez simuler les appels sur les émulateurs en composant le numéro qui se trouve en haut à gauche de la barre de titre de la fenêtre d'émulation, sinon ben faites le débogage sur votre propre téléphone.

CallLog.Calls

Pour récupérer l'historique des appels, nous allons requêter une base de données interne en utilisant les outils mis à disposition dans le SDK d'Android. Attention cependant : il risque d'y avoir une incompatibilité entre certains modules.

Pour des versions antérieures à Honeycomb (3.0) il faudra utiliser :

// requete d'appels par ordre ascendant passés après une certaine date Uri allCalls = Uri.parse("content://call_log/calls"); cursor = managedQuery(allCalls, null, CallLog.Calls.DATE +" >?", new String[] {calendar.getTimeInMillis()+"" }, CallLog.Calls.DATE + " ASC"); startManagingCursor(cursor); cursor.moveToFirst();

Pour les autres il faudra utiliser un CursorLoader

Il est ainsi possible de filtrer l'appel par son numéro (répondeur,...), sa date, son sens (entrant, sortant,...) et des statistiques pourront être mises en place.

Multithread!

Pour gérer l'affichage des appels dans des barres de progression ou en texte, pour peu que vous ayez énormément d'appels, l'affichage risque de se figer. Pour palier à cela, il faut organiser le traitement des données dans un thread qui appellera la procédure d'affichage à intervalles réguliers pour ne pas bloquer l'affichage. Le plus plus simple à réaliser est une classe proposée par Android dont il faudra redéfinir les méthodes :

  • onPreExecute : actions à faire avant de lancer le process demandé
  • doInBackground : traitement à lancer visible dans le processus général (variables,...). Il peut appeler publishProgress qui va afficher l'avancement de la tâche dans...
  • onProgressUpdate : que faut-il afficher ou faire lors d'une demande d'affichage de l'avancement?
  • onPostExecute : traitement à lancer après le process
L'appel du thread se fera dans le thread principal (l'activité) en instanciant la classe du thread :
UiThread ui = new UiThread(); ui.execute();

Eh c'est cool! Maintenant je veux filtrer par jour, mois, année, en fonction des phases de lune,...

Euh si vous avez le temps pourquoi pas mais là... Je vous conseille quand même de faire un petit tour sur les différents markets afin de trouver l'application de votre choix. Pour ma part j'ai trouvé CreditUsage qui propose des filtres puissants et une belle présentation, la version payante propose un affichage du journal d'appels et de SMS et une version d'essai Pro de 5 jours. Bien sûr laissez dans les commentaires des applications qui vous ont plu et qui arrivent à gérer les combinaisons d'offres des fournisseurs d'accès français.

Mise à disposition du code source

La source que je vous fournis est principalement un mélange des tutoriels et de la documentation officielle de Google trouvée sur Internet, vous avez donc le droit d'en prendre des morceaux pour vous aider à faire votre propre application de suivi de consommation téléphonique. Si toutefois vous avez envie de tout prendre, pensez à inclure une petite citation. Je m'excuse par avance des régions non commentées, il s'agit de morceaux de code posés pour tenter de résoudre un quelconque problème.

Par ici pour récupérer la source!

Rappel

Comme je l'avais précisé dans mon article précédent :

  • persévérez! J'ai réussi à faire une partie du code un jour sans Internet!
  • progressez lentement, vous ne savez pas comment votre appareil va se comporter si vous lui donnez plein d'instructions d'un coup
  • internationalisez votre application pour mieux gérer les messages et pensez aux différentes configurations de téléphones (écran,...)

Bon courage!

+ Sources des images


Vous pouvez aussi lire :

GoufaliteGoufalite - Site Web - Steam - Twitter
Rédacteur et programmeur principal du Goufablog. Ingénieur de profession et avide de connaissances technologiques et scientifiques il partage son savoir à travers ces différents articles. Plus de renseignements sur la page de contact.
RSS Voir ses articles...
CC-BY-SACet article est protégé par une licence CC-BY-SA.


Tags : android, java, orange, sqllite, suivi conso
Delicious   Facebook   Commentaires(2) | Permalink
RSS:Commentaires du billet Il y a 2 commentaires.
Commentaire supprimé le 21 avril 2017
Commentaire supprimé le 27 avril 2017
Votre avis?
(Obligatoire)

Site et style réalisé par Goufalite
Reproduction interdite sans l'accord de l'auteur.
Valid XHTML 1.0 Transitional Optimisé pour FireFox 2
avec une résolution 1024*768