【问题标题】:How convert Bundle to WorkManager Data如何将 Bundle 转换为 WorkManager 数据
【发布时间】:2018-05-29 09:13:38
【问题描述】:
由于 Android O 背景限制,我在处理 GCM 时尝试摆脱 IntentService,如 here. 所述。但是我不能将带有推送信息的Bundle extras 作为参数从BroadcastReceiver 传递给WorkManager。有什么办法可以将Bundle放入WorkManagerData?
【问题讨论】:
标签:
android
google-cloud-messaging
android-intentservice
android-bundle
android-workmanager
【解决方案1】:
我以一种简单的方式解决了这个问题。我注意到,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
}
}