2010-11-16 6 views
0

Existe-t-il un moyen de récupérer le nombre de messages SMS envoyés entre des dates spécifiques dans Android?Comment obtenir le nombre de messages SMS envoyés entre des dates spécifiques dans Android

Je préférerais une fonctionnalité SDK officiellement prise en charge, ce qui indique dans votre réponse si cela fait partie du SDK officiel serait utile.

Je suis au courant de la question de trop-plein this de la pile, mais il semble utiliser le pas officiellement pris en charge android.provider.Telephony.SMS_RECEIVED et content://sms/sent, donc je préfère ne pas l'utiliser (s'il vous plaît me corriger si je me trompe à ce sujet étant non pris en charge).

Répondre

7

Je sais que c'est une question très ancienne, je suis juste tombé sur et repéré comme sans réponse. Alors s'il vous plaît ne me rabaisse pas juste à cause de ça. Peut-être que quelqu'un aura besoin de cette réponse.

Tout ce que vous avez à faire est d'interroger le fournisseur de contenu de téléphone (je CallLog.Calls constantes au lieu des chaînes codées en dur pour les noms de colonnes)

String[] projection = { CallLog.Calls.DATE }; 
Uri smsContentUri = Uri.parse("content://sms/"); 
Cursor cursor = this.getContentResolver().query(smsContentUri , selection,where, null, null); 
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yy"); 
cursor.moveToFirst(); 
    Log.d("SMS COUNT", ""+cursor.getCount()); 
    while(cursor.isAfterLast() == false){ 
     Log.d("SMS DATE", ""+cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE))); //raw format of the date in milliseconds 
     long callDate = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));  
     String dateString = format.format(new Date(callDate)); 
     Log.i("SMS DATE",dateString); 
     cursor.moveToNext(); 
} 

tout ce que vous devez faire pour votre cas est de fournir une clause where qui fera la sélection sur la projection. Vous devez convertir les limites des dates que vous avez mentionnées en millisecondes (obtenir la date et la convertir en ms). Assurez-vous que votre motif correspond à "dd-MM-yy".

La clause where devrait ressembler à:

String where = CallLog.Calls.DATE+"<"+FRIST_BOUND_IN_MS + " AND "+ CallLog.Calls.DATE + "< " + SECOND_BOUND_IN_MS; 

qui nous amène à la forme définitive de notre requête: SELECT date FROM sms_content WHERE date < 'firstbound' AND date < 'second bound'

Modifier Uri smsContentUri = Uri.parse("content://sms/"); ajouter à la fin du "content://sms/" envoyé ou boîte de réception pour obtenir "content://sms/sent" ou "content://sms/inbox", concernant la boîte que vous souhaitez interroger. À la vôtre.

+0

Je suis en train d'upvoter mais je ne sélectionne pas parce que cette réponse ne résout pas vraiment le problème majeur que j'avais au sujet du contenu: // sms étant une API non officielle. –

+0

Je ne pense pas qu'il existe une API officielle pour cela. Cela devrait fonctionner sur la plupart des appareils. – midhunhk

Questions connexes