๐Ÿ’ป ๊ฐœ๋ฐœ/iOS

[TIL] 22.03.14

2022. 3. 14. 19:20
๋ชฉ์ฐจ
  1. ๊ณต๋ถ€ํ•œ ๊ฒƒ
  2. ์•Œ๊ฒŒ๋œ ๊ฒƒ
  3. 1. FusedLocationProvider
  4. 2. http ์ฒ˜๋ฆฌ
  5. 3. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ
  6. 4. ์ƒํƒœ๋ฐ” ์ œ๊ฑฐ
  7. ๊ณต๋ถ€ํ•  ๊ฒƒ
  8. ๋А๋‚€ ์ 

๊ณต๋ถ€ํ•œ ๊ฒƒ

์•ˆ๋“œ๋กœ์ด๋“œ ๊ฐ•์˜ ์ˆ˜๊ฐ•

  1. ์นด์นด์˜คํ†ก, ๊ณต๊ณต๋ฐ์ดํ„ฐ API
  2. Retrofit, OkHttpLoggingInterceptor
  3. FusedLocationProvider
  4. Coroutine
  5. AppWidgetProvider
  6. 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
  1. ๊ณต๋ถ€ํ•œ ๊ฒƒ
  2. ์•Œ๊ฒŒ๋œ ๊ฒƒ
  3. 1. FusedLocationProvider
  4. 2. http ์ฒ˜๋ฆฌ
  5. 3. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฒ˜๋ฆฌ
  6. 4. ์ƒํƒœ๋ฐ” ์ œ๊ฑฐ
  7. ๊ณต๋ถ€ํ•  ๊ฒƒ
  8. ๋А๋‚€ ์ 
'๐Ÿ’ป ๊ฐœ๋ฐœ/iOS' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL] 22.03.16
  • [TIL] 22.03.15
  • [TIL] 22.03.13
  • [TIL] 22.03.10
kodo_o
kodo_o
iOS ๊ฟ€์žผ!
kodo_o
๐ŸŽ๐Ÿ
kodo_o
์ „์ฒด
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (149)
    • ๐Ÿ”จ ํ”„๋กœ์ ํŠธ (0)
      • TP 1 (0)
      • WhiteHCCTV (0)
      • FootPrint (0)
    • ๐Ÿ’ป ๊ฐœ๋ฐœ (63)
      • iOS (30)
      • Android (6)
      • Kotlin (4)
      • Flutter (9)
      • Node.js (5)
      • Architecture (1)
      • ์˜ค๋Š˜์˜ ์‚ฝ์งˆ (7)
      • ์—๋Ÿฌ์™€์˜ ๋™์นจ (1)
    • โœ๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (6)
      • Graph (6)
      • String (0)
      • Sort (0)
    • โœ๏ธ ์ฝ”ํ…Œ ์ค€๋น„ (44)
      • Math (1)
      • Implementation (3)
      • String (3)
      • Brute Force (5)
      • Back Tracking (7)
      • Greedy (0)
      • Dynamic Programming (13)
      • Binary Search (1)
      • DFS, BFS (5)
      • Shortest Path (2)
      • Two Pointer (4)
      • MST (0)
    • ๐Ÿ“š CS (6)
      • Operating System (6)
    • โ›น๏ธ ๋ผ์ดํ”„ (30)
      • 2020 ๊ฒจ์šธ๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (12)
      • 2021 ์—ฌ๋ฆ„๋ฐฉํ•™ ๋ชจ๊ฐ์ฝ”(๊ฐœ์ธ) (6)
      • ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ (1)
      • ํšŒ๊ณ  (10)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ๊นƒํ—ˆ๋ธŒ

์ธ๊ธฐ ๊ธ€

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.
kodo_o
[TIL] 22.03.14
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.