2017-05-23 4 views
0

Comment récupérer tous les messages SMS d'un contact spécifique?Comment faire pour interroger tous les messages SMS par un utilisateur spécifique lorsque vous avez l'ID de contact

J'ai vu des moyens de récupérer tous les messages SMS, puis filtrer vers la personne en particulier. Mais je veux interroger en utilisant l'id de contact/numéro de téléphone.

J'interroge le contact en utilisant ContactsContract.CommonDataKinds.Phone.NUMBER. Mais cette chaîne ne semble pas correspondre au format address dans Telephony.Sms.Inbox.ADDRESS.

Un nombre a des parenthèses et des tirets alors que les autres ne le font pas.

Est-ce toujours le cas? Si non, quelle est la meilleure façon d'interroger tous les messages SMS si vous avez déjà l'ID de contact?

Répondre

0

Il y a plusieurs façons d'accomplir cela, mais le mieux serait de trouver l'ID de thread du fil de conversation avec ce contact/numéro, puis d'interroger l'ID de fil pour tous les messages.

Notez qu'il ya beaucoup de problèmes avec différents niveaux de l'API, des appareils avec double sim, mms/messages sms, etc.

requête pour toutes les discussions (avec leur fil-id):

// This projection is suitable for API-19 and above only 
String[] projection = { Threads._ID, Threads.RECIPIENT_IDS, "sort_index", Threads.SNIPPET } 
Uri uri = Threads.CONTENT_URI.buildUpon().appendQueryParameter("simple", "true").build(); 
Cursor cur = getContentResolver().query(uri, projection, selection, null, "sort_index" + " DESC"); 

Pour traduire entre un RecipientId et un numéro de téléphone, vous pouvez copier le RecipientIdCache class d'Android à votre projet. C'est une classe singleton utilisée pour convertir l'identifiant en nombre.

requête pour tous les messages par thread-id:

// This projection is suitable for API-19 and above only 
String[] projection = new String[]{ 
    MmsSms.TYPE_DISCRIMINATOR_COLUMN, 
    Telephony.Sms._ID, 
    Telephony.Sms.BODY, 
    "sort_index", 
    Telephony.Sms.DATE_SENT 
}; 
Uri uri = ContentUris.withAppendedId(Threads.CONTENT_URI, id); 
Cursor cur = getContentResolver().query(uri, projection, null, null, null); 
+0

est recipientid est la même valeur ContactsContract.Contacts._ID? Parce que c'est ce que j'ai. L'utilisateur choisit un à partir d'une liste de contact et je dois lire tous les sms pour ce contact. En outre RecipientIdCache utilise contenu: // mms-sms/canonique-adresse et contenu: // mms-sms/canoniques-adresses. Quelles sont les différences entre ces deux? – dumbkam

+0

Non, un ID de contact n'est pas l'ID du destinataire, et l'ID du destinataire est un ID unique par conversation SMS, une conversation SMS peut être effectuée avec des contacts, des numéros de téléphone qui ne sont pas des contacts, un groupe de numéros de téléphone, et des adresses spéciales non-téléphoniques comme "GOOGLE" (qui est une adresse SMS valide) – marmor