본문 바로가기
안드로이드/Wrok Manager

안드로이드 WokrManger 실행 조건 설정(Constraints)

by 김어찐 2022. 12. 1.
728x90

Worker

import android.content.Context
import android.util.Log
import androidx.work.Worker
import androidx.work.WorkerParameters
import java.lang.Exception

class UploadWorker(context: Context,params:WorkerParameters) : Worker(context,params) {
    override fun doWork(): Result {
        try {
            for (i in 0..600000) {
                Log.i("MYTAG", "Uploading $i")
            }
            return Result.success()
        } catch (e:Exception){
            return Result.failure()
        }
    }
}

MainActivity

constraints 조건이 만족되어야 worker 작동

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.Observer
import androidx.work.Constraints
import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        button.setOnClickListener {
            setOneTimeWorkRequest()
        }
    }

    private fun setOneTimeWorkRequest() {

        val workManager = WorkManager.getInstance(applicationContext)
        val constraints = Constraints.Builder()
            .setRequiresCharging(true)
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val uploadRequest = OneTimeWorkRequest.Builder(UploadWorker::class.java)
            .setConstraints(constraints)
            .build()
        workManager.enqueue(uploadRequest)
        workManager.getWorkInfoByIdLiveData(uploadRequest.id)
            .observe(this, Observer {
              textView.text = it.state.name
            })



    }
}
728x90