实现WorkManager时如何向Workerclass发送字节数组?

How to send a byteArray to Worker class when implementing WorkManger?

我正在尝试将 byteArray 作为输入数据发送到 WorkRequest 中的我的 Worker Class。有没有一种方法可以发送 byteArray 并在工作人员内部接收相同的内容 class?

我已经尝试发送 IntArray 并且我能够获得结果。

实施:

//work request
 val workRequest = OneTimeWorkRequest.Builder(MyWroker::class.java)
                  .setInputData(createInputData())
                  .build()
//create Input Data for work request
fun createInputData(): Data {
        return Data.Builder()
                .putString(FIRST_KEY, "My value")
                .putInt(SECOND_KEY, 5)
                .putByteArray(getByteArray())
                .build()
    }

I am getting an error cannot resolve method getByteArray(). I have read the documentation of Data class and there is no such method available.

Data 对象中存储和检索字节和字节数组的支持已添加到 WorkManager v2.1.0-alpha01

您可以添加WorkManager的KTX并在您的工作请求中使用OneTimeWorkRequestBuilder<>() and workDataOf()(或使用Data.Builder对象的putByteArray()方法):

val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
    .setInputData(createInputData())
    .build()

private fun createInputData() = workDataOf(
    FIRST_KEY to "My value", 
    SECOND_KEY to byteArrayOf(0x2E, 0x38))

然后使用类似以下内容在您的 worker 中检索字节数组:

class MyWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) {

    override fun doWork(): Result {
        val myByteArray = inputData.getByteArray()

        // Do something with the ByteArray

        Result.success()
    }
}