我正在尝试从Android下的G Suite 联系人目录(或Exchange全局地址列表)加载地址。此目录不实现完整的ContactsContract,但仅限于CONTENT_FILTER_URI以及其他一些人。我可以加载联系方式,电话号码和电子邮件地址。但我无法加载邮政地址。要获取联系人ID,我使用以下代码:
// The directory I use in this example has the number 3:
String directoryId = "3";
// A contact with the name "Test" is searched in directory "3":
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI, Uri.encode("Test")).buildUpon()
.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId)
.build();
// The id of the first result is loaded:
Cursor c = cr.query(uri, new String[]{ContactsContract.Contacts._ID}, null, null, null);
c.moveToNext();
String id = c.getString(0);
之后我获得了“id”中第一个联系人的ID。现在我想加载该联系人的所有邮政地址。但是,此代码返回null而不是游标,但仅当我使用directoryId“3”:
时Uri uri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI.buildUpon()
.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId)
.build();
Cursor c = cr.query(uri, new String[]{ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS}, ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID+"=?", new String[]{id}, null);
c.moveToNext();
c.getString(0);
它适用于directoryId“0”。因此,似乎G Suite联系人目录未实现ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI。但是Android联系人应用程序能够加载该联系人的地址。
从联系人目录获取联系人的“StructuredPostal”对象的正确方法是什么?
答案 0 :(得分:0)
<强>更新强>
似乎没有办法获得除下表之外的任何内容:ContactsContract.Contacts
,CommonDataKinds.Phone
,CommonDataKinds.Email
,因为所有其他人都缺少CONTENT_FILTER_URI
来运行查询。