마이그레이션 도중 추후를 위해 정리 필요성을 느낌
1. gradle 설정
gps 를 위한 코드와 permission 체크를 위한 gradle을 설정한다
permission 체크는 accompanist-permissions를 이용할 것이다
version-catalog를 설정해준다
google-location = "21.3.0"
accompanist-permissions = "0.36.0"
google-location = {module = "com.google.android.gms:play-services-location",version.ref = "google-location"}
accompanist-permissions = {module = "com.google.accompanist:accompanist-permissions",version.ref = "accompanist-permissions"}
그후 gradle에 추가해준다
implementation(libs.google.location)
implementation(libs.accompanist.permissions)
2. Manifest 추가
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
위치를 찾아주는 퍼미션을 추가해준다
3. 권한 요청
val multiplePermissionsState = rememberMultiplePermissionsState(
permissions = listOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
)
when {
multiplePermissionsState.allPermissionsGranted -> {
LaunchedEffect(Unit){}
}
multiplePermissionsState.shouldShowRationale -> {}
else -> {
LaunchedEffect(Unit) {
multiplePermissionsState.launchMultiplePermissionRequest()
}
}
}
- allPermissionGranted : 모든 권한이 허용된 경우에 처리할 로직을 작성한다
- shouldShowRationale : 사용자가 권한을 거부했을 때, 왜 권한이 필요한지 설명한다
- launchMultiplePermissionReques : 권한 요청을 실행한다
4. GPS 추적
위치 정보를 추적하기 위해 FusedLocationProviderClient를 사용하여 고정밀도 위치 업데이트를 요청합니다.
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
val locationRequest = LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 10000)
.setMinUpdateIntervalMillis(10000)
.build()
val locationCallback = object : LocationCallback() {
override fun onLocationResult(locationResult: LocationResult) {
val location = locationResult.lastLocation
location?.let {
fusedLocationClient.removeLocationUpdates(this)
}
}
}
fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
- LocationRequest.Builder: 10초 주기로 고정밀도 위치 업데이트 요청을 설정한다
- locationCallback: 위치가 업데이트되면 호출되는 콜백 함수다
- fusedLocationClient.removeLocationUpdates(this): 위치 업데이트를 중지한다. 지속적인 업데이트가 필요하다면 이 부분을 제거한다.
그 후 location callback이 발생하면 위 코드를 통해 위치 업데이트를 중지한다. 만약 지속적으로 요청을 하고싶다면 위 코드를 삭제하면 된다
반응형
'안드로이드 > 공부 및 정리' 카테고리의 다른 글
[Android]Compose 정렬 (0) | 2024.09.17 |
---|---|
[Android]Android Studio 펀치홀/노치 대응 (0) | 2024.09.09 |
[Android]Compose에서의 NaverMap (0) | 2024.08.30 |
[Android]Compose의 상태관리 (0) | 2024.08.30 |
[Android]기존 xml 코드를 Compose로 마이그레이션 하며 참고할 것 (0) | 2024.08.27 |