앱에서 구글맵 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
'ANDROID' 카테고리의 다른 글
[안드로이드] 소숫점 조정된 double 변수로 ValueAnimator 사용하기 (0) | 2018.07.13 |
---|---|
[안드로이드] ViewPager를 사용하는 swipe view에서 페이지 다시 생성을 방지하기 (0) | 2018.06.22 |
[안드로이드] 터치이벤트를 수동으로 생성해 입력하기 (0) | 2018.05.25 |
[안드로이드] 구글맵 객체를 참조해 onMapReady 함수 외부에서 제어하기 (0) | 2018.05.15 |
[안드로이드] TabbedActivity에서 각 Fragment의 레이아웃 구성요소 설정 및 제어 (0) | 2018.04.24 |