2017-05-23 39 views
0

如何檢索特定聯繫人的所有短信?當您有聯繫人ID時,如何查詢特定用戶發送的所有短信消息

我看到了檢索所有短信的方法,然後過濾到特定的人。但我想使用聯繫人ID /電話號碼進行查詢。

我在查詢使用ContactsContract.CommonDataKinds.Phone.NUMBER的聯繫人。但該字符串似乎與Telephony.Sms.Inbox.ADDRESS中的address格式不匹配。

一個數字有圓括號和破折號,而其他數字沒有。

情況總是這樣嗎?如果沒有,如果您已經有聯繫人ID,查詢所有短信的最佳方式是什麼?

回答

0

有很多方法可以實現這一點,但最好的方法是找到與該聯繫人/號碼對話線索的線索ID,然後查詢所有郵件的線索ID。

注意,有很多不同的API級別,擁有雙SIM,MMS/SMS消息等

查詢所有線程設備(與他們的線程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"); 

要在RecipientId和電話號碼之間進行翻譯,您可以將Android的RecipientIdCache class複製到您的項目中。這是一個用於將id轉換爲數字的單例類。

查詢由線程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

是recipientId是相同的值ContactsContract.Contacts._ID?因爲這就是我所擁有的。用戶從聯繫人列表中選擇一個,我必須閱讀該聯繫人的所有短信。 RecipientIdCache還使用content:// mms-sms/canonical-address和content:// mms-sms/canonical-addresses。這兩者之間有什麼區別? – dumbkam

+0

不,聯繫人ID不是收件人ID,並且收件人ID是每個短信會話的唯一ID,短信會話可以與聯繫人,非聯繫人的電話號碼,一組電話號碼,和特殊的非電話地址,如「GOOGLE」(這是一個有效的短信地址) – marmor

相關問題