3

我试图摆脱这里描述的IntentService处理时由于 Android O 背景限制。但是我不能将带有推送信息的Bundle extras 作为参数传递给from 。有没有办法将 Bundle 放入DataGCMWorkManagerBroadcastReceiverWorkManager

4

1 回答 1

7

我以一种简单的方式解决了这个问题。我注意到,Bundle的整个参数都是字符串,所以我只是将它们放入broadcastReceiver中的Data并转换回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
    }
}
于 2018-05-29T10:44:54.687 回答