1

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

4

1 回答 1

0

更新

除了从下表中获取任何东西之外似乎没有其他方法:ContactsContract.Contacts, CommonDataKinds.Phone, CommonDataKinds.Email, 因为所有其他人都缺乏CONTENT_FILTER_URI运行查询。

于 2017-11-30T12:37:05.457 回答