如何查询Android上的ComplateScontract.commondatakinds.s.commondatakinds.s.
-
28-09-2019 - |
题
我正在尝试为SMS消息构建对话列表。因此,我正在阅读“ content:// sms/对话”,并阅读每个对话的前几条消息,以查找通信合作伙伴的电话号码。使用这些数字,我尝试从ContactScontract.commondatakinds.s.phone检索Contact_ID,以从联系人数据库中获取该人的其余信息。
String[] returnVals = new String[] {ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Cursor pCur = thisContent.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
returnVals,
ContactsContract.CommonDataKinds.Phone.DATA1 + " = \"" + phoneNumber + "\"",
null,
null);
当我旋转此查询的结果时,我会发现尽管将它们存储在触点数据库中,但找不到一些联系人。例如,一个与我的联系人列表之一相关联的数字,位于似乎与破折号一起存储的州。我了解这可能是一个问题,但是从线程中提取的其他数字仍以它们在短信中出现的方式存储,但仍未找到。
所以我的问题是:
- 这是正确的方法吗?我想念什么吗?有一个更简单的方法可以实现这一目标吗?
- 我将从Contactscontract.commondatakinds.phone中回来的是指人联系人的_id。我想我不能像适当的长期_id一样处理那个,但是我需要如何做到这一点呢?
- 除了SDK的文档外,是否还有关于SMS处理的教程?
解决方案
您应该看看推荐的 contactscontract.phonelookup 提供者
表示查找电话号码的结果的表,例如,呼叫者ID。要执行查找,必须将要找到的数字附加到content_filter_uri。此查询已高度优化。
Uri uri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
resolver.query(uri, new String[]{PhoneLookup.DISPLAY_NAME,...
不隶属于 StackOverflow