如何检索来自特定联系人的所有短信?
我看到了检索所有短信然后过滤到特定人的方法。但我想使用联系人 ID/电话号码进行查询。
我正在使用ContactsContract.CommonDataKinds.Phone.NUMBER
查询联系人。但是该字符串似乎与Telephony.Sms.Inbox.ADDRESS
中的address
格式不匹配。
一个数字有括号和破折号,而其他数字没有。
情况总是这样吗?如果没有,如果您已经有联系人 ID 查询所有短信的最佳方法是什么?
方法可以实现此目的,但最好的方法是查找具有该联系人/号码的会话线程的线程 ID,然后查询所有消息的线程 ID。
请注意,不同的 API 级别、双 SIM 卡设备、彩信/短信等存在很多问题。
查询所有线程(及其线程 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 类复制到您的项目中。它是一个用于将 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);