2014년 8월 29일 금요일

안드로이드에서 Criteria provider를 이용하여 주소를 가져오는 방법을 알려드리고자 합니다.

안드로이드에서 Criteria provider를 이용하여 주소를 가져오는 방법을 알려드리고자 합니다.

단, 주의해야할 사항은 Criteria로 주소를 가져올 경우 번지정보를 가져오는 대신 구 정보를 가져오지 않기 때문에
구 정보를 가져오기 위해서는 야후에서 제공하는 API 를 이용하여 구 정보를 가져와야 한다.
야후 API: https://developer.apps.yahoo.com/wsregapp/index.php

* java 소스

LocationManager locationManager;
String context = Context.LOCATION_SERVICE;
locationManager = (LocationManager)getSystemService(context);
  
Criteria criteria = new Criteria();
criteria.setAccuracy(Criteria.ACCURACY_COARSE);// 정확도
criteria.setPowerRequirement(Criteria.POWER_LOW); // 전원 소비량
criteria.setAltitudeRequired(false); // 고도 사용여부
criteria.setBearingRequired(false); //
criteria.setSpeedRequired(false); // 속도
criteria.setCostAllowed(true); // 금전적비용

String provider = locationManager.getBestProvider(criteria, true);
Location location = locationManager.getLastKnownLocation(provider);

double latitude = location.getLatitude(); // 위도
double longitude = location.getLongitude(); // 경도

Geocoder gcK = new Geocoder(getApplicationContext(),Locale.KOREA);
            try {
                List<Address>  addresses = gcK.getFromLocation(latitude, longitude, 1);
                StringBuilder sb = new StringBuilder();

                if (addresses.size() > 0) {
                    for (Address addr : addresses) {
                        sb.append(addr.getMaxAddressLineIndex()).append("********\n");
                        for (int i=0;i < addr.getMaxAddressLineIndex();i++) 
                            sb.append(addr.getAddressLine(i)).append("<< \n\n");
                    }
                    sb.append("===========\n");
                    
                    Address address = addresses.get(0);
                    sb.append(address.getCountryName()).append("\n");
                    sb.append(address.getPostalCode()).append("\n");
                    sb.append(address.getLocality()).append("\n");
                    sb.append(address.getThoroughfare()).append("\n");
                    sb.append(address.getFeatureName()).append("\n\n");
                    
                    sb.append(tStr).append("\n");
                    sb.append(tStrLocal).append("\n");
                    
                    addressString = sb.toString();
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

* 결과화면
2010/10/06 - [Andro. Dev] - 안드로이드 GPS 상태체크
2010/09/08 - [Andro. Dev] - 안드로이드 실시간 네트워크 확인하는 방법 - ConnectivityManager
2010/09/09 - [Andro. Dev] - 안드로이드 getLocalActivityManager & Dialog 사용시 에러 해결방법
2010/09/06 - [Andro. Etc] - Manifest 파일내 permission 정보
2010/09/01 - [Andro. Dev] - 안드로이드 Map ApiKey 발급하는 방법
2010/09/01 - [Andro. Dev] - 안드로이드 MapView에서 줌 배율 문제
2010/10/06 - [Andro. Dev] - 안드로이드 위치 주소정보 가져오는 방법


sb.append("나라명(대한민국):" + address.getCountryName() + "\n");
sb.append("나라코드(KR):" + address.getCountryCode() + "\n");
sb.append("AdminArea:" + address.getAdminArea() + "\n"); // 여기에 경기도 라고 적히고, 서울은 null임
//sb.append("SubAdminArea:null" + address.getSubAdminArea() + "\n");  // 여기는  null
sb.append("Locality:" + address.getLocality() + "\n");  // 여기에 서울시 적힘
//sb.append("SubLocality:null" + address.getSubLocality() + "\n");  // 여기는 null
sb.append("주요간선도로(동):" + address.getThoroughfare() + "\n");  // 여기에 도로 안적히고 호계동/서교동  적힘
//sb.append("세부도로:" + address.getSubThoroughfare() + "\n"); // 여기는 null
sb.append("FeatureName(번지):" + address.getFeatureName() + "\n");  // 여기는 번지
sb.append("전화번호:" + address.getPhone() + "\n");
sb.append("우편번호:" + address.getPostalCode() + "\n");

단, 한국내 구이름은 AddressLine을 통해서만 가지고 올 수 있다.

댓글 없음:

댓글 쓰기