곡λΆν κ²
- μΉ΄μΉ΄μ€ν‘, 곡곡λ°μ΄ν° 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 |