본문 바로가기

ANDROID

[안드로이드] 기기의 GPS 정보를 따라 위도, 경도를 가져오기 (FusedLocationProviderClient)

앱에서 구글맵 API를 이용할 때 setMyLocationEnabled(true) 옵션을 통해


맵 카메라를 현재위치로 이동할 수 있었지만, 하고싶었던건 맵 프래그먼트를 띄웠을 때


기기의 초기 GPS 정보를 가져와 위도경도를 따라 카메라를 위치시키는 것이었다.


이를 위해 여러가지 자료를 참조하고 적용해봤지만 최종적으로 안드로이드 developers 페이지에서


공식적인 해답을 얻을 수 있었다.



1. 우선 첫째로는 매니페스트 파일에  아래와 같은 권한이 추가되어 있는지 확인한다.

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>


2. 둘째로 onCreate부분에 mFusedLocationClient 를 아래와 같이 가져온다. 



private FusedLocationProviderClient mFusedLocationClient;

// ..

@Override
protected void onCreate(Bundle savedInstanceState) {
   
// ...

    mFusedLocationClient
= LocationServices.getFusedLocationProviderClient(this);
}



3. 셋째로 OnSuccessListener를 mFusedLocationClient에 아래와 같이 붙여준다.


여기서 if (location !== null) 내부에서 location.getLatitide(), location.getLongitude() 등의 Location 옵션을 이용해


위도와 경도를 가지고 오면 된다.



mFusedLocationClient.getLastLocation()
       
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
           
@Override
           
public void onSuccess(Location location) {
               
// Got last known location. In some rare situations this can be null.
               
if (location != null) {
                   
// Logic to handle location object
               
}
           
}
       
});



사용하는 프로젝트에 따라 permission check를 추가하라는 메시지를 안드로이드 스튜디오에서 보여줄 수 있는데,


그때는 추가하라고 하는 permission check를 안드로이드 스튜디오에서 제안하는 대로 자동 추가하면 된다.


안드로이드 스튜디오가 자동으로 추가해준 permission check는 아래와 같다.


if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED

 && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {


return;

}



이 방법으로 기기의 초기 gps정보를 활용해 최초 카메라의 위치를 설정하는 데 성공할 수 있었다.


이 gps 정보는 location을 가져온다고 했을때 (mFusedLicationClient.getLastLocation()) 이에 성공하면


가져올 수 있는것으로 보이는데, getLastLocation()을 필요한 부분에서 수행해서 주기적으로 기기의


위치를 가져올 수 있는지 등등은 테스트를 통해 확인하거나 문서를 확인해봐야 할 것으로 보인다.



<참고>


https://developer.android.com/training/location/retrieve-current#java