如何检索特定联系人的所有短信?
我看到了检索所有短信的方法,然后特别过滤给了这个人。但我想使用联系人ID /电话号码进行查询。
我使用ContactsContract.CommonDataKinds.Phone.NUMBER
查询联系人。但该字符串似乎与address
中的Telephony.Sms.Inbox.ADDRESS
格式不匹配。
一个数字有括号和破折号,而其他数字没有。
总是这样吗?如果没有,如果您已经拥有联系人ID,查询所有短信的最佳方法是什么?
答案 0 :(得分:0)
有很多方法可以实现这一点,但最好的方法是找到具有该联系人/号码的会话线程的thread-id,然后查询所有消息的thread-id。
请注意,不同API级别存在很多问题,设备具有双SIM卡,mms / sms消息等。
查询所有线程(使用其thread-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转换为数字的单例类。
按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);