이 방법은 구글에서 권장하는 방법입니다.
Google API Client를 이용하여서 위치를 가져오는 방법입니다.
먼저 GoogleApiClient부분을 interface해줍니다.
1 | public class BaseFragment extends Activity implements GoogleApiClient.OnConnectionFailedListener,GoogleApiClient.ConnectionCallbacks | cs |
그리고 접속하는 부분에 LocationService를 넣어줍니다.
1 2 3 4 5 | mGoogleApiClient = new GoogleApiClient.Builder(this) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); | cs |
override implement는 총 3가지가 생깁니다.
onConnected, OnConnectionSuspended, OnConnectionFailed
우리는 onConnected부분에 코딩을 하면됩니다.
GoogleAPI에 성공적으로 접속이 되고 난 후 위치를 가져오는 방법은 2가지가있습니다.
가장 최근의 위치를 가져오는 getLastLocation과 새롭게 업데이트 된 위치를 가져오는 requestLocationUpdates가 있습니다.
getLastLocation
1 2 3 4 | Location mLastLocation = LocationServices.FusedLocationApi.getLastLocation(mGoogleApiClient); if (mLastLocation != null) { initlatlng=new LatLng(mLastLocation.getLatitude(),mLastLocation.getLongitude()); } | cs |
Line 1 : google api service에 연결이 되어있다면 mLastLocation에 Location data가 저장됩니다.
Line 3 : Location data에서 latitude와 longitude값을 가져오게 됩니다.
최근 위치는 한번만 호출을 하고나면 더이상 위치를 가져오지 않습니다.
다시 요청을 해야합니다.
requestLocationUpdates
하지만 requestLocationUpdates를 하게되면 한번 호출로 계속해서 위치를 업데이트합니다.
중지하기위해서는 중지 명령을 내려줘야 합니다.
requestLocatonUpdates를 사용하기 위해서는 LocationListener를 interface해줍니다.
1 | public class BaseFragment extends Activity implements LocationListener { | cs |
그리고 override implement를 추가합니다.
1 2 3 4 5 6 7 | @Override public void onLocationChanged(Location location) { d1=location.getLatitude(); d2=location.getLongitude(); Log.e("onMyLocationChange", d1 + "," + d2); myMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(d1, d2), 18)); } | cs |
이렇게 하면 위치가 업데이트 될 때마다 지도의 위치가 바뀌게 됩니다.
그리고 LocationRequest 세팅을 해줘야 합니다.
1 2 3 4 5 6 | protected void createLocationRequest() { mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(10000); mLocationRequest.setFastestInterval(5000); mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); } | cs |
Line 3~4 : 위치요청 주기입니다. 이 위치요청 주기는 너무빠르게도 너무 느리게도 하면 안됩니다.
잘못하다간 위치를 받지 못하는 경우도 생길수가 있습니다.
Line 5 : 위치 요청 레벨입니다. 일반적으로 Priority.high_accuracy를 많이 사용합니다.
위치요청 시작하기
1 | LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, this); | cs |
이렇게 하시면 requestLocationUpdates가 시작됩니다.
그리고 위치가 이동될때마다 callback 되어 위치를 나타내게 됩니다.
위치요청 중지하기
1 | LocationServices.FusedLocationApi.removeLocationUpdates(MainActivity.mGoogleApiClient,this); | cs |
위치요청 중지입니다.
이렇게 하시면 위치요청이 종료됩니다.
'Study > Android' 카테고리의 다른 글
android에서 mysql 데이터 가져오기 (92) | 2015.11.18 |
---|---|
custom Notification (커스텀 알림창) (0) | 2015.11.18 |
Google map Location (구글맵 위치) - setMyLocationChangeListener (0) | 2015.10.26 |
google maps android API를 이용한 지도 2 - Fragment (2) | 2015.10.23 |
google maps android API를 이용한 지도 1 - FragmentActivity (6) | 2015.10.23 |