En premier, il faut localiser la base contenant les SMS : il s'agit d'une base unique à toutes les applications, en cherchant un peu on a trouve à cet emplacement :
/data/data/com.android.providers.telephony/databases/mmssms.db
Maintenant, 2 choix : travailler directement dessus ou sur une copie. J'avais d'abord pensé récupérer la base mmssms.db pour la lire avec un logiciel tel que ou , mais la version utilisée par Android semble plus récente et ils n'ont pas réussis à ouvrir la base, j'ai donc fait un dump en utilisant sqlite3 du téléphone (.dump), puis j'ai importé ce dump dans une nouvelle base pour utiliser ces résultats plus facilement.
On peut lire la base, c'est ensuite assez simple, une requête pour connaitre le nombre de sms reçu et une autre pour le nombre de sms émis par jour :
select date(date/1000,'unixepoch'), count(*) from sms where address = "<TEL>" and person is not null group by date(date/1000,'unixepoch') order by _id asc;
select date(date/1000,'unixepoch'), count(*) from sms where address = "<TEL>" and person is null group by date(date/1000,'unixepoch') order by _id asc;
Explications :
- on selectionne la date et le nombre d'enregistrements concernés par ce groupement, depuis la table sms
- on selectionne l'interlocuteur (address) et : person est null pour les sms envoyés, c'est un nombre sinon
- la date est au format timestamp unix ("unixepoch"), mais en millisecondes, il faut les retirer pour les traiter avec les fonctions SQLite (/1000)
- on groupe les résultat par date identique (group by)