๊ณต๋ถํ ๊ฒ
- ์นด์นด์คํก, ๊ณต๊ณต๋ฐ์ดํฐ API
- Retrofit, OkHttpLoggingInterceptor
- FusedLocationProvider
- Coroutine
- AppWidgetProvider
- Service Lifecycle
์๊ฒ๋ ๊ฒ
1. FusedLocationProvider
์๋๋ก์ด๋์์ ์์น ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์๋ ๋ฐฉ๋ฒ์๋ LocationManager
์ FusedLocationProvider
๊ฐ ์๋ค. ์ฐ์ LocationManager
์ getLastKnownLocation
๋๋ LocationListener
๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
// LocationManager ๋ฅผ ์ ์ํ๋ค.
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
// ์ด๋ค ๋ฐฉ์์ผ๋ก ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ฅผ ์ ํ๋ค.
// getLastKnownLocation ์ ํธ์ถ๋ ๊ฒฝ์ฐ์๋ง GPS ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
val currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
// ์ ํด์ง ์๊ฐ๋ง๋ค ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ ๊ฒฝ์ฐ LocationListener ๋ฅผ ์ฌ์ฉํ๋ค.
val locationListener = object : LocationListener {
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
super.onStatusChanged(provider, status, extras)
// provider ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ
}
override fun onLocationChanged(location: Location) {
// ์์น๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ํธ์ถ
}
override fun onProviderEnabled(provider: String) {
super.onProviderEnabled(provider)
// provider ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ํธ์ถ
}
override fun onProviderDisabled(provider: String) {
super.onProviderDisabled(provider)
// ์ฌ์ฉ์๊ฐ GPS๋ฅผ ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด provider ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ํธ์ถ
}
}
// ๋งค๊ฐ๋ณ์๋ก ์์น ์ ๋ณด ์ ๊ณต์, LocationListener ํธ์ถ ์ฃผ๊ธฐ, ๋ณ๊ฒฝ ์์น ๊ฑฐ๋ฆฌ์ ์ ๋ณด, LocationListener ๋ฅผ ๋ฃ์ด์ค๋ค.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000, 100.0f, locationListener)
FusedLocationProvider ๋ ์๋์ ๊ฐ์ ์ด์ ๋ค๋ก ์ฌ์ฉ์ด ๊ถ์ฅ๋๊ณ ์๋ค.

์ฌ๊ธฐ์๋ ๋ ๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ ๋ฆฌ๊ฐ ๋์ด ์๋ค.
2. http ์ฒ๋ฆฌ
์๋๋ก์ด๋์์ https
๊ฐ ์๋ http
๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋ณ๋์ ์ฝ๋๊ฐ ํ์ํ๋ค. Manifest
์์ <Application>
์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
android:usesCleartextTraffic="true"
3. ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ
ํ๋ฉด ์ ํ ์์ ๋ญ๊ฐ ํ! ํ๊ณ ๋ฐ๋ก ์ ํ๋๋ ๊ฒ๋ณด๋ค ์ค๋ฅด๋ฅต~ ํ๊ณ ์ ํ๋๋๊ฒ ์กฐ๊ธ ๋๋์ด ์๋ค. ์ด ๋ animate
๋ฅผ ์ฌ์ฉํ๋ค. ์ฐ์ ์ ๋๋ฉ์ด์
์ ์ฌ์ฉํ ๋ ์ด์์์ alpha
๋ฅผ 0์ผ๋ก ์ง์ ํ๊ณ ์ ํ ์์ 1๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋์ด๋ค. ์ค๋ ์์
ํ๋ ์ฝ๋์ ์ผ๋ถ๋ถ์ ๊ฐ์ ธ์๋ดค๋ค.
private fun displayAirQualityData(
monitoringStation: MonitoringStation,
measuredValue: MeasuredValue
) = with(binding) {
contentLayout.animate()
.alpha(1F)
.start()
measuringStationNameTextView.text = monitoringStation.stationName
measuringStationAddressTextView.text = monitoringStation.addr
}
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋์ด๋ค. alpha
๋ฅผ ๋ณ๊ฒฝํ๊ณ start
๋ฅผ ํธ์ถํ๋ค.
4. ์ํ๋ฐ ์ ๊ฑฐ
์ํ๋ฐ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ์ปฌ๋ฌ๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด theme.xml
์ ์ด์ง ์๋ด์ฃผ๋ฉด ๋๋ค. ๊ธฐ์กด ํฐ์ or ๊ฒ์์์ ์น์นํ ์ํ๋ฐ๊ฐ ์ฌ๋ผ์ง๊ณ ๋ด ์ฑ์ ๋ ์ด์์์ ๋ง๊ฒ ์ปฌ๋ฌ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ํ์ง๋ง ์ํ๋ฐ ํฌ๊ธฐ๋งํผ ์ ์ฒด์ ์ผ๋ก ์๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ MarginTop
์ ์ค์ผ ํ๋ค.
<item name="android:windowTranslucentStatus">true</item>
๊ณต๋ถํ ๊ฒ
๋ด์ผ์ ์ง์ง ์ง์ง ์ฝ๋ฃจํด ๊ณต๋ถ
๋๋ ์
์ง๊ธ๊น์ง ์์น ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ๋ LocationManager
์ LocationListener
๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๋ฐ์์๋๋ฐ ์ด๋ฒ์ ํด๋ก ์ฝ๋ฉ์ ํ๋ฉด์ FusedLocationProvider
๋ฅผ ์๊ฒ ๋๋ค. ๊ตฌํ ์์ฒด๋ ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ํผํฌ๋จผ์ค ์ธก๋ฉด์์๋ ํจ์ฌ ์ข๊ธฐ ๋๋ฌธ์ ์์ผ๋ก LocationManager
๋ณด๋จ FusedLocationProvider
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ์ค์ ๋ก ๊ตฌ๊ธ์์๋ FusedLocationProvider
์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์๋ค. ์์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ ์์ ์์ด์ ์์น ์ ๋ณด๋ ์๋นํ ์ค์ํ๊ณ ์์ฃผ ์ฌ์ฉ๋ ๊ฒ์ด๋ฏ๋ก ์ด์ ๋ํด ์ฃผ๋ง์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชธ์กฐ๋ฆฌ ์ํ์.
'๐ป ๊ฐ๋ฐ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 22.03.17 (0) | 2022.03.17 |
---|---|
[TIL] 22.03.16 (0) | 2022.03.16 |
[TIL] 22.03.15 (0) | 2022.03.15 |
[TIL] 22.03.13 (0) | 2022.03.13 |
[TIL] 22.03.10 (0) | 2022.03.10 |
๊ณต๋ถํ ๊ฒ
- ์นด์นด์คํก, ๊ณต๊ณต๋ฐ์ดํฐ API
- Retrofit, OkHttpLoggingInterceptor
- FusedLocationProvider
- Coroutine
- AppWidgetProvider
- Service Lifecycle
์๊ฒ๋ ๊ฒ
1. FusedLocationProvider
์๋๋ก์ด๋์์ ์์น ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ์ ์๋ ๋ฐฉ๋ฒ์๋ LocationManager
์ FusedLocationProvider
๊ฐ ์๋ค. ์ฐ์ LocationManager
์ getLastKnownLocation
๋๋ LocationListener
๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
// LocationManager ๋ฅผ ์ ์ํ๋ค.
val locationManager = getSystemService(LOCATION_SERVICE) as LocationManager
// ์ด๋ค ๋ฐฉ์์ผ๋ก ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ์ง๋ฅผ ์ ํ๋ค.
// getLastKnownLocation ์ ํธ์ถ๋ ๊ฒฝ์ฐ์๋ง GPS ์ ๋ณด๋ฅผ ๊ฐ์ ธ์จ๋ค.
val currentLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER)
// ์ ํด์ง ์๊ฐ๋ง๋ค ์์น ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ผ ํ ๊ฒฝ์ฐ LocationListener ๋ฅผ ์ฌ์ฉํ๋ค.
val locationListener = object : LocationListener {
override fun onStatusChanged(provider: String?, status: Int, extras: Bundle?) {
super.onStatusChanged(provider, status, extras)
// provider ์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ
}
override fun onLocationChanged(location: Location) {
// ์์น๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ํธ์ถ
}
override fun onProviderEnabled(provider: String) {
super.onProviderEnabled(provider)
// provider ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ํธ์ถ
}
override fun onProviderDisabled(provider: String) {
super.onProviderDisabled(provider)
// ์ฌ์ฉ์๊ฐ GPS๋ฅผ ๋ ๊ฒฝ์ฐ์ ๊ฐ์ด provider ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ํธ์ถ
}
}
// ๋งค๊ฐ๋ณ์๋ก ์์น ์ ๋ณด ์ ๊ณต์, LocationListener ํธ์ถ ์ฃผ๊ธฐ, ๋ณ๊ฒฝ ์์น ๊ฑฐ๋ฆฌ์ ์ ๋ณด, LocationListener ๋ฅผ ๋ฃ์ด์ค๋ค.
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 100000, 100.0f, locationListener)
FusedLocationProvider ๋ ์๋์ ๊ฐ์ ์ด์ ๋ค๋ก ์ฌ์ฉ์ด ๊ถ์ฅ๋๊ณ ์๋ค.

์ฌ๊ธฐ์๋ ๋ ๊ฐ์ ์ฐจ์ด์ ์ ๋ํด ์ ๋ฆฌ๊ฐ ๋์ด ์๋ค.
2. http ์ฒ๋ฆฌ
์๋๋ก์ด๋์์ https
๊ฐ ์๋ http
๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด์ ๋ณ๋์ ์ฝ๋๊ฐ ํ์ํ๋ค. Manifest
์์ <Application>
์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค.
android:usesCleartextTraffic="true"
3. ์ ๋๋ฉ์ด์ ์ฒ๋ฆฌ
ํ๋ฉด ์ ํ ์์ ๋ญ๊ฐ ํ! ํ๊ณ ๋ฐ๋ก ์ ํ๋๋ ๊ฒ๋ณด๋ค ์ค๋ฅด๋ฅต~ ํ๊ณ ์ ํ๋๋๊ฒ ์กฐ๊ธ ๋๋์ด ์๋ค. ์ด ๋ animate
๋ฅผ ์ฌ์ฉํ๋ค. ์ฐ์ ์ ๋๋ฉ์ด์
์ ์ฌ์ฉํ ๋ ์ด์์์ alpha
๋ฅผ 0์ผ๋ก ์ง์ ํ๊ณ ์ ํ ์์ 1๋ก ๋ณ๊ฒฝํด์ฃผ๋ฉด ๋์ด๋ค. ์ค๋ ์์
ํ๋ ์ฝ๋์ ์ผ๋ถ๋ถ์ ๊ฐ์ ธ์๋ดค๋ค.
private fun displayAirQualityData(
monitoringStation: MonitoringStation,
measuredValue: MeasuredValue
) = with(binding) {
contentLayout.animate()
.alpha(1F)
.start()
measuringStationNameTextView.text = monitoringStation.stationName
measuringStationAddressTextView.text = monitoringStation.addr
}
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋์ด๋ค. alpha
๋ฅผ ๋ณ๊ฒฝํ๊ณ start
๋ฅผ ํธ์ถํ๋ค.
4. ์ํ๋ฐ ์ ๊ฑฐ
์ํ๋ฐ์ ์๋ ๊ธฐ๋ณธ์ ์ธ ์ปฌ๋ฌ๋ฅผ ์ ๊ฑฐํ๊ณ ์ถ๋ค๋ฉด theme.xml
์ ์ด์ง ์๋ด์ฃผ๋ฉด ๋๋ค. ๊ธฐ์กด ํฐ์ or ๊ฒ์์์ ์น์นํ ์ํ๋ฐ๊ฐ ์ฌ๋ผ์ง๊ณ ๋ด ์ฑ์ ๋ ์ด์์์ ๋ง๊ฒ ์ปฌ๋ฌ๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ํ์ง๋ง ์ํ๋ฐ ํฌ๊ธฐ๋งํผ ์ ์ฒด์ ์ผ๋ก ์๋ก ์ด๋ํ๊ธฐ ๋๋ฌธ์ MarginTop
์ ์ค์ผ ํ๋ค.
<item name="android:windowTranslucentStatus">true</item>
๊ณต๋ถํ ๊ฒ
๋ด์ผ์ ์ง์ง ์ง์ง ์ฝ๋ฃจํด ๊ณต๋ถ
๋๋ ์
์ง๊ธ๊น์ง ์์น ์ ๋ณด๋ฅผ ๋ฐ์์ฌ ๋ LocationManager
์ LocationListener
๋ฅผ ํตํด์ ์์น ์ ๋ณด๋ฅผ ๋ฐ์์๋๋ฐ ์ด๋ฒ์ ํด๋ก ์ฝ๋ฉ์ ํ๋ฉด์ FusedLocationProvider
๋ฅผ ์๊ฒ ๋๋ค. ๊ตฌํ ์์ฒด๋ ํจ์ฌ ๊ฐ๊ฒฐํ๊ณ ํผํฌ๋จผ์ค ์ธก๋ฉด์์๋ ํจ์ฌ ์ข๊ธฐ ๋๋ฌธ์ ์์ผ๋ก LocationManager
๋ณด๋จ FusedLocationProvider
๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ค. ์ค์ ๋ก ๊ตฌ๊ธ์์๋ FusedLocationProvider
์ฌ์ฉ์ ๊ถ์ฅํ๊ณ ์๋ค. ์์ผ๋ก ์ดํ๋ฆฌ์ผ์ด์
์ ์์ ์์ด์ ์์น ์ ๋ณด๋ ์๋นํ ์ค์ํ๊ณ ์์ฃผ ์ฌ์ฉ๋ ๊ฒ์ด๋ฏ๋ก ์ด์ ๋ํด ์ฃผ๋ง์ ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชธ์กฐ๋ฆฌ ์ํ์.
'๐ป ๊ฐ๋ฐ > iOS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 22.03.17 (0) | 2022.03.17 |
---|---|
[TIL] 22.03.16 (0) | 2022.03.16 |
[TIL] 22.03.15 (0) | 2022.03.15 |
[TIL] 22.03.13 (0) | 2022.03.13 |
[TIL] 22.03.10 (0) | 2022.03.10 |