【问题标题】: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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-17
      相关资源
      最近更新 更多