Формат адреса в сотах / ICS - PullRequest
       13

Формат адреса в сотах / ICS

2 голосов
/ 06 февраля 2012

У меня есть приложение, которое может получить почтовый адрес из контактной информации на устройстве.Я получаю информацию для адреса, почтового индекса, города и т. Д., Используя API контактов, используя код, подобный приведенному ниже.Затем я отображаю адрес в отдельных строках, и пользователь может принять его или изменить при желании.

String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
String[] params = new String[]{id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; 
Cursor addrCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, where, params, null); 
...

while(addrCur.moveToNext()) {
    String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
    String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
    String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
    String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
    String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY));
    ...
}       
addrCur.close();

Это хорошо работало с Android 2.2 / 2.3, но я заметил, что в 3.x и выше весь возвращаемый адрес может быть отформатирован как одна строка с разрывами строк в поле STREET.Это происходит, когда контакт / адрес создан на устройстве;если я синхронизирую контакт из Gmail, адрес будет получен правильно (я подозреваю, что информация о синхронизации сохраняется в правильных полях).Я не вижу способа получить отдельные элементы данных (улица, почтовый индекс и т. Д.) Для этих типов адресов.Это возможно?Нужно ли использовать новый API?

1 Ответ

1 голос
/ 08 августа 2012

Я не нашел способ сделать это.Единственный обходной путь, который я нашел, состоит в том, чтобы получить полный отформатированный адрес, получив столбец ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS из курсора, а затем попытаться разбить его на части, предполагая пару различных стандартных форматов.В приложении Honeycomb / ICS Contacts нет другого способа ввода адреса, кроме как с помощью текстового поля произвольной формы, поэтому я полагаю, что приложение Contacts не пытается выполнить его автоматический анализ перед сохранением в базе данных.

Надеюсь, я ошибаюсь, и есть способ сделать это, но я еще не нашел его.

...