2012-02-06 3 views
2

기기의 연락처 정보에서 우편 주소를 검색 할 수있는 앱이 있습니다. 아래 주소와 같은 코드를 사용하여 연락처 API를 사용하여 주소, 우편 번호, 도시 등의 정보를 검색합니다. 그런 다음 주소를 별도의 줄에 표시하고 사용자가이를 수락하거나 원하는 경우 변경할 수 있습니다.Honeycomb/ICS의 주소 형식

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(); 

이 안드로이드 2.2/2.3와 함께 잘 작동했지만 나는 3.x 및 반환 된 전체 주소가 STREET 필드에 줄 바꿈 하나의 문자열로 포맷 할 수있는 이상에서 나타났습니다. 이것은 연락처/주소가 장치에 생성 될 때 발생합니다. Gmail의 연락처를 동기화하면 주소가 올바르게 검색됩니다 (동기화 된 정보가 올바른 입력란에 저장되어있는 것 같습니다). 이러한 유형의 주소에 대한 개별 데이터 요소 (거리, 우편 번호 등)를 가져올 방법이 없습니다. 이것이 가능한가? 사용할 필요가있는 새로운 API가 있습니까?

답변

1

나는 그것을 할 방법을 찾지 못했습니다. 내가 찾은 유일한 해결 방법은 커서에서 ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS 열을 가져 와서 형식이 지정된 전체 주소를 얻은 다음 몇 가지 다른 표준 형식을 가정하고이를 구분하려고 시도하는 것입니다. 자유형 텍스트 상자를 사용하는 것 이외에 Honeycomb/ICS Contacts 앱에 주소를 입력 할 방법이 없으므로 주소록 앱은 데이터베이스에 저장하기 전에 자동으로 분석하지 않습니다.

바라기를 나는 틀렸고 그것을 할 방법이있다. 그러나 나는 아직 그것을 발견하지 못했다.