2026/03/12

오늘의 이야기

Geofencing (지오펜싱)


여러 번 지오펜싱에 대한 포스팅을 해 보았습니다. 이번에도 다시 이 포스팅을 하게 된 것은 지오펜싱에 대한 부족했던 이해를 추가로 적어 두고자 합니다. 


 


지오펜싱이 활용된 앱 샘플



적어 두고자 하는 내용은 지오펜싱을 하기 위해서 설정을 하기는 했어도 지오펜싱이 동작하지 않는 경우 때문입니다.


 


지오펜싱이 트리거 되지 않는다.


아래 이슈의 내용은 지오펜싱이 트리거 되지 않을 현상에 대한 이야기가 나와 있습니다.  앱을 구현하는 동안 GoogleMap이 표출된 상태에서는 지오펜싱 트리거가 잘 동작 합니다.  


 


https://issuetracker.google.com/issues/218335535



 


Google Issue Tracker


 


issuetracker.google.com




그러나 GoogleMap 이 살아 있지 못하는 경우 트리거가 되지 않는 현상이 발생하게 됩니다. 그래서 구글링을 해서 얻은 결론은 위 링크의 글에서 참고했습니다. 


 


LocationManager의 활용


아래 코드와 같이 locationManager을 이용해서 현재 위치를 받아오는 기능을 활성화하는 것입니다.  이렇게 하게 되면 사용자가 GoogleMap 을 열어 놓고 있지 않게 되어도 geofencing 이 trigger 되어 언제든 지 휴대장치의 위치 정보를 수집할 수 있게 됩니다.  


	val criteria = Criteria().apply {
accuracy = Criteria.ACCURACY_FINE
isAltitudeRequired = false
isBearingRequired = false
isSpeedRequired = false
isCostAllowed = true
powerRequirement = Criteria.POWER_LOW
}

lateinit var locationManager : LocationManager
var locationProvider : String? = null

val locationListener = object : LocationListener {
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
super.onStatusChanged(provider, status, extras)
// provider의 상태가 변경될때마다 호출
// deprecated
}

override fun onLocationChanged(location: Location) {
// 위치 정보 전달 목적으로 호출(자동으로 호출)

val longitude = location.longitude
val latitude = location.latitude

Log.d("Location", "Latitude : $latitude, Longitude : $longitude")
}

override fun onProviderEnabled(provider: String) {
super.onProviderEnabled(provider)
// provider가 사용 가능한 생태가 되는 순간 호출
}

override fun onProviderDisabled(provider: String) {
super.onProviderDisabled(provider)
// provider가 사용 불가능 상황이 되는 순간 호출
}
}

...

locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
locationProvider = locationManager.getBestProvider(criteria, true)

val location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)

if(location != null) {
val accuracy = location.accuracy
val latitude = location.latitude
val longitude = location.longitude
}

// 매개변수로 위치 정보 제공자, LocationListener 호출 주기, 변경 위치 거리의 정보, LocationListener
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000
, 100.0f, locationListener)

 


이제 위치 정보가 변하는 것을 이용해서 원하는 기능을 구현해 볼 수 있을 것 같습니다.  다음부터는 이런 기능 오류에 대한 대처는 잘 될 수 있을 것으로 생각됩니다.


 


 


 


 





댓글 없음:

댓글 쓰기

오늘의 이야기

이번 여행에는 차편(자체, 렌터카)을 준비하지 않았습니다. 혼자 하는 여행이기도 했지만, 아무 준비도 없이 떠난 여행이었기 때문에요. 울릉군청 홈페이지 울릉군청 홍보대사(?)도 아니면서 울릉군청 홈페이지 링크를 달아 놓은 이유는 딱 하나... 정보가...