Как конвертировать Bundle в данные WorkManager - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь избавиться от IntentService при обработке GCM, как описано здесь . Из-за ограничения фона Android O.Но я не могу передать Bundle дополнений с push-информацией в качестве параметра в WorkManager из BroadcastReceiver.Есть ли способ поместить Bundle в WorkManager Data ?

1 Ответ

0 голосов
/ 29 мая 2018

Я решаю эту проблему простым способом.Я заметил, что все параметры Bundle являются строками, поэтому я просто помещаю их в Data в broadcastReceiver и преобразую обратно в Worker.

class GcmWorker : Worker() {
    companion object {
        fun createWork(extras: Bundle): OneTimeWorkRequest {
            val dataBuilder = Data.Builder()
            extras.keySet().forEach {
                dataBuilder.putString(it, extras.getString(it))
            }

            return OneTimeWorkRequest.Builder(GcmWorker::class.java)
                    .setInputData(dataBuilder.build())
                    .build()
        }
    }

    override fun doWork(): Result {
        val extras = Bundle()
        for (key in inputData.keyValueMap.keys) {
            extras.putString(key, value)
        }
        // ...
        return WorkResult.FAILURE
    }
}
...