Skip to content

Commit 9420f81

Browse files
committed
feat : WorkManager 통한 주기적인 네트워크 호출 구현
1 parent a0258bb commit 9420f81

File tree

5 files changed

+100
-3
lines changed

5 files changed

+100
-3
lines changed

presentation/build.gradle

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,15 @@ dependencies {
6262
implementation files('libs/vsm-tmap-sdk-v2-android-1.6.60.aar')
6363
implementation files('libs/tmap-sdk-1.1.aar')
6464

65-
//Hilt
65+
// Hilt
6666
implementation 'com.google.dagger:hilt-android:2.44'
67-
kapt 'com.google.dagger:hilt-compiler:2.44'
67+
kapt 'com.google.dagger:hilt-android-compiler:2.44'
68+
implementation 'androidx.hilt:hilt-work:1.0.0'
69+
kapt 'androidx.hilt:hilt-compiler:1.0.0'
70+
71+
// WorkManager
72+
implementation 'androidx.work:work-runtime:2.7.1'
73+
implementation 'androidx.work:work-runtime-ktx:2.7.1'
6874

6975
// LiveData
7076
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'

presentation/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<uses-permission android:name="android.permission.INTERNET" />
77
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
88
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
9+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
910

1011
<application
1112
android:name=".TroubleShooterApplication"
@@ -19,6 +20,10 @@
1920
android:theme="@style/Theme.PlzStop"
2021
android:usesCleartextTraffic="true"
2122
tools:targetApi="31">
23+
<provider
24+
android:name="androidx.startup.InitializationProvider"
25+
android:authorities="${applicationId}.androidx-startup"
26+
tools:node="remove" />
2227
<activity
2328
android:name=".MainActivity"
2429
android:exported="true">
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package com.stop
2+
3+
import android.content.Context
4+
import android.util.Log
5+
import androidx.hilt.work.HiltWorker
6+
import androidx.work.CoroutineWorker
7+
import androidx.work.Data
8+
import androidx.work.WorkerParameters
9+
import androidx.work.workDataOf
10+
import com.stop.domain.model.nearplace.Place
11+
import com.stop.domain.usecase.nearplace.GetNearPlacesUseCase
12+
import dagger.assisted.Assisted
13+
import dagger.assisted.AssistedInject
14+
import kotlinx.coroutines.Dispatchers
15+
import kotlinx.coroutines.flow.collectLatest
16+
import kotlinx.coroutines.withContext
17+
18+
// 일단은 NearPlaceUseCase 이용하여서 데이터 가져오기 구현
19+
20+
@HiltWorker
21+
class AlarmWorker @AssistedInject constructor(
22+
@Assisted context: Context,
23+
@Assisted workerParameters: WorkerParameters,
24+
private val getNearPlacesUseCase: GetNearPlacesUseCase
25+
) : CoroutineWorker(context, workerParameters) {
26+
27+
lateinit var resultList: List<Place>
28+
29+
override suspend fun doWork(): Result {
30+
return try {
31+
callApi()
32+
val output: Data = workDataOf("WORK_RESULT" to resultList.toString())
33+
Result.success(output)
34+
} catch (e: Exception) {
35+
Log.e("ABC", e.toString())
36+
Result.failure()
37+
}
38+
}
39+
40+
private suspend fun callApi() {
41+
withContext(Dispatchers.IO) {
42+
getNearPlacesUseCase.getNearPlaces(
43+
1,
44+
"아남타워",
45+
126.969652,
46+
37.553836,
47+
BuildConfig.TMAP_APP_KEY
48+
).collectLatest {
49+
resultList = it
50+
}
51+
}
52+
53+
}
54+
55+
}
Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,20 @@
11
package com.stop
22

33
import android.app.Application
4+
import androidx.hilt.work.HiltWorkerFactory
5+
import androidx.work.Configuration
46
import dagger.hilt.android.HiltAndroidApp
7+
import javax.inject.Inject
58

69
@HiltAndroidApp
7-
class TroubleShooterApplication : Application()
10+
class TroubleShooterApplication : Application(), Configuration.Provider{
11+
12+
@Inject
13+
lateinit var workerFactory : HiltWorkerFactory
14+
15+
override fun getWorkManagerConfiguration(): Configuration =
16+
Configuration.Builder()
17+
.setWorkerFactory(workerFactory)
18+
.build()
19+
20+
}

presentation/src/main/java/com/stop/ui/alarmsetting/AlarmSettingFragment.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,20 @@ package com.stop.ui.alarmsetting
33
import android.os.Bundle
44
import android.transition.AutoTransition
55
import android.transition.TransitionManager
6+
import android.util.Log
67
import android.view.LayoutInflater
78
import android.view.View
89
import android.view.ViewGroup
910
import androidx.fragment.app.Fragment
1011
import androidx.fragment.app.viewModels
1112
import androidx.navigation.findNavController
13+
import androidx.work.PeriodicWorkRequestBuilder
14+
import androidx.work.WorkManager
15+
import com.stop.AlarmWorker
1216
import com.stop.R
1317
import com.stop.databinding.FragmentAlarmSettingBinding
1418
import dagger.hilt.android.AndroidEntryPoint
19+
import java.util.concurrent.TimeUnit
1520

1621
@AndroidEntryPoint
1722
class AlarmSettingFragment : Fragment() {
@@ -115,9 +120,22 @@ class AlarmSettingFragment : Fragment() {
115120

116121
fun setAlarmRegisterListener() {
117122
alarmSettingViewModel.saveAlarm()
123+
makeAlarmWorker()
118124
binding.root.findNavController().navigate(R.id.action_alarmSetting_to_mapFragment)
119125
}
120126

127+
private fun makeAlarmWorker() {
128+
val periodicWorkRequest = PeriodicWorkRequestBuilder<AlarmWorker>(15, TimeUnit.MINUTES)
129+
.build()
130+
val workManager = WorkManager.getInstance(requireContext())
131+
workManager.enqueue(periodicWorkRequest)
132+
workManager.getWorkInfoByIdLiveData(periodicWorkRequest.id)
133+
.observe(viewLifecycleOwner) { info ->
134+
val outPutData = info.outputData.getString("WORK_RESULT")
135+
Log.e("ABC", outPutData.toString())
136+
}
137+
}
138+
121139
override fun onDestroyView() {
122140
_binding = null
123141
super.onDestroyView()

0 commit comments

Comments
 (0)