当您拥有联系人 ID 时,如何查询特定用户的所有短信



如何检索来自特定联系人的所有短信?

我看到了检索所有短信然后过滤到特定人的方法。但我想使用联系人 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);

相关内容

  • 没有找到相关文章

最新更新