현재 위치에 대한 GPS 및 주소를 가져오는 예제를 간략하게 정리하려고 합니다.               1. 권한 설정 위치 정보를 가져오기 위해 가장 먼저 위치 관련 권한을 체크해야 합니다. AndroidManifest.xml에서 권한을 추가해 줍...

[안드로이드] 현재 GPS 및 주소 가져오기

현재 위치에 대한 GPS 및 주소를 가져오는 예제를 간략하게 정리하려고 합니다.

 

 

 

 

 

 

 

1. 권한 설정

위치 정보를 가져오기 위해 가장 먼저 위치 관련 권한을 체크해야 합니다.

AndroidManifest.xml에서 권한을 추가해 줍니다.

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

 

그리고 런타임에서의 권한 요청까지 메서드를 작성하고 MainActivity onCreate 에서 호출합니다.

private fun requestLocationPermission() {
try {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
|| ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
) {
ActivityCompat.requestPermissions(
this, arrayOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
), 100
)
}
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

requestLocationPermission() // 위치 권한 요청

...
}

 

앱 실행 시 아래와 같은 팝업창을 확인 할 수 있습니다.



 

 

 

 

 

2. 위치 가져오기

LocationManager를 활용해서 아래와 같이 위치 정보를 가져올 수 있습니다.

private fun getLocation(): Location? {
if (
ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
) {
return null
}

val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager
return locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
}


LocationManager에 대해 자세한 내용을 알고싶은 분을 위해 아래 링크로 남깁니다!

Android Developer : LocationManager

 

 

 

 

 

 

 

3. 주소 가져오기

Geocoder를 활용해서 아래와 같이 주소를 가져올 수 있습니다.

private fun getAddress(latitude: Double, longitude: Double): String {
val geocoder = Geocoder(this, Locale.getDefault())
val addresses: List<Address>? = try {
geocoder.getFromLocation(latitude, longitude, 5)
} catch (ioException: IOException) {
return "Error : Location service not available"
} catch (illegalArgumentException: IllegalArgumentException) {
return "Error : GPS values are incorrect"
}

if (addresses.isNullOrEmpty()) {
return "Error : Address not found"
}

val address = addresses[0]
return address.getAddressLine(0)
}

 

Geocoder에 대해 자세한 내용을 알고싶은 분을 위해 아래 링크로 남깁니다!

Android Developer : Geocoder

 

 

 

 

 

 

 

4. 테스트 결과

버튼을 클릭 했을 때 위도, 경도, 주소가 잘 출력되는지 확인해보려고 합니다.

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)

requestLocationPermission() // 위치 권한 요청

binding.btnGetLocation.setOnClickListener {
val location = getLocation()
if (location != null) {
// 위치
binding.tvGPS.text = "${location.latitude}, ${location.longitude}"

// 주소
binding.tvAddress.text = getAddress(location.latitude, location.longitude)
}
}
}

 

 실행결과는 아래와 같습니다.



 




 

0 comments: