사용자 위치 확인

사용자의 위치를 찾고, 변경된 위치 정보를 기반으로 지도에 표현할 수 있는 기능에 대해 설명합니다.

위치 데이터 사용

위치 권한 설정

위치 기능을 사용하기 위해서는 아래와 같이 AndroidManifest.xmlACCESS_FINE_LOCATIONarrow-up-right, ACCESS_COARSE_LOCATIONarrow-up-right 권한을 명시해야 합니다.

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

LocationProvider

LocationProviderarrow-up-right는 사용자의 위치를 제공하는 인터페이스입니다. InaviMaparrow-up-right 객체의 locationProviderarrow-up-right 속성을 설정하여 사용자의 위치를 제공받을 수 있습니다. 설정된 LocationProviderarrow-up-rightactivate()arrow-up-right, deactivate()arrow-up-right 함수는 InaviMaparrow-up-right 내부에서 상황에 따라 호출합니다.

FusedLocationProvider

FusedLocationProviderarrow-up-right는 저전력으로 GPS 외에 센서 등을 활용하여 정확도가 높은 위치를 제공합니다. FusedLocationProviderarrow-up-right는 내부에서 위치 권한을 요청하도록 구현되어 있기 때문에 생성자에 Activity 또는 Fragment 객체를 전달하고, OnPermissionResultCallbackarrow-up-right 콜백으로 권한 요청에 대한 결과를 받을 수 있습니다.

class LocationActivity : AppCompatActivity(), OnMapReadyCallback {
    companion object {
        private const val LOCATION_PERMISSION_REQUEST_CODE = 10000
    }

    private val locationProvider by lazy {
         FusedLocationProvider(this) { isGranted ->
             // 권한 요청 결과 처리
         }
    }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
        mapFragment.getMapAsync(this)
        ...
    }

    override fun onMapReady(inaviMap: InaviMap) {
        inaviMap.locationProvider = locationProvider
        inaviMap.uiSettings.isLocationButtonVisible = true // 위치 버튼 표출
    }
}

위치 추적 모드

InaviMaparrow-up-right 객체에 locationProviderarrow-up-right 속성을 설정한 다음, 사용자가 위치 권한 사용을 승인하면 위치 추적 기능을 사용할 수 있습니다. userTrackingModearrow-up-right 속성을 설정하거나 현위치 버튼을 클릭하여 위치 추적 모드를 변경할 수 있습니다.

위치 추적 모드의 종류는 아래와 같으며, UserTrackingModearrow-up-right 열거형에 정의되어 있습니다.

  • Trackingarrow-up-right

    위치 추적이 활성화 되며, 사용자의 위치에 맞춰 위치 아이콘의 위치와 카메라의 좌표가 변경됩니다.

    API 호출 또는 제스처 사용으로 카메라가 변경되면 NoTrackingarrow-up-right으로 변경됩니다.

  • TrackingCompassarrow-up-right

    위치 추적이 활성화 되며, 사용자의 위치와 방향에 맞춰 위치 아이콘의 위치와 카메라의 좌표, 베어링 각도가 변경됩니다. API 호출 또는 제스처 사용으로 카메라가 변경되면 NoTrackingarrow-up-right으로 변경됩니다.

위치 변경 이벤트

InaviMap#addOnLocationChangedListener()arrow-up-right 메서드를 호출하여 위치 변경 리스너를 추가하면 위치 변경에 대한 이벤트를 감지할 수 있습니다. 위치 추적이 활성화된 다음, 사용자의 위치가 변경되면 onLocationChanged()arrow-up-right 콜백 함수로 변경된 사용자의 위치가 전달됩니다.

Last updated