Ограничение зарядки не работает должным образом в WorkManager В Android Kotlin

#android #kotlin #android-broadcast #android-workmanager

Вопрос:

Я написал этот код и дал два ограничения:

  1. Сеть подключена
  2. Зарядное устройство подключено

но когда я отключаю зарядное устройство, ставлю код в очередь и снова подключаю зарядное устройство, оно не запускается и остается в состоянии очереди, пока сетевое ограничение работает нормально.

Класс Деятельности

 class MainActivity : AppCompatActivity() {

private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityMainBinding.inflate(layoutInflater)
    setContentView(binding.root)

    val viewModel = ViewModelProvider(this).get(MainViewModel::class.java)
    binding.button.setOnClickListener {
        setWorkManager()
    }
}

private fun setWorkManager() {
    val workManager =  WorkManager.getInstance(applicationContext)
    val constrains = Constraints.Builder()
        .setRequiresCharging(true)
        .build()

    val uploadRequest = OneTimeWorkRequestBuilder<MyWorker>()
        .setConstraints(constrains)
        .build()

    workManager.enqueue(uploadRequest)
}
 

}

Рабочий класс

 class MyWorker(
    context: Context,
    param: WorkerParameters) :  Worker(context, param) {

    override fun doWork(): Result {
        return try {
            for (i in 0..600) {
                Log.i("check", "in $i")
            }
            Result.success()
        } catch (e: Exception) {
            Result.failure()
        }
    }
}
 

Ответ №1:

Ваш код выглядит правильно.

WorkManager setRequiresCharging() построен на лучших рабочих setRequiresCharging() местах, и у него может быть иногда удивительное поведение. Из документации JobScheduler:

Для выполнения заданий «зарядка» устройства с питанием от батареи-это не совсем то же самое, что просто подключение к источнику питания. Если устройство настолько занято, что батарея разряжается, несмотря на подключение к источнику питания, задания с этим ограничением выполняться не будут. Это может произойти во время некоторых распространенных случаев использования, таких как видеочат, особенно если устройство подключено к USB, а не к настенному источнику питания.

Я также видел, что иногда в эмуляторе вам нужно настроить устройство на зарядку, а затем увеличить заряд батареи, чтобы увидеть, что ваша работа будет запланирована.