有很多方法可以實現這一點,但最好的方法是找到與該聯繫人/號碼對話線索的線索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);
是recipientId是相同的值ContactsContract.Contacts._ID?因爲這就是我所擁有的。用戶從聯繫人列表中選擇一個,我必須閱讀該聯繫人的所有短信。 RecipientIdCache還使用content:// mms-sms/canonical-address和content:// mms-sms/canonical-addresses。這兩者之間有什麼區別? – dumbkam
不,聯繫人ID不是收件人ID,並且收件人ID是每個短信會話的唯一ID,短信會話可以與聯繫人,非聯繫人的電話號碼,一組電話號碼,和特殊的非電話地址,如「GOOGLE」(這是一個有效的短信地址) – marmor