如何从联系人目录加载地址?

时间:2017-11-28 16:55:21

标签: android android-contacts contactscontract gsuite gal

我正在尝试从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”对象的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

<强>更新

似乎没有办法获得除下表之外的任何内容:ContactsContract.ContactsCommonDataKinds.PhoneCommonDataKinds.Email,因为所有其他人都缺少CONTENT_FILTER_URI来运行查询。