0

ダウンロードの進行状況を Flow で監視したいので、次のような関数を書きました。

suspend fun downloadFile(file: File, url: String): Flow<Int>{
        val client = HttpClient(Android)
        return flow{
            val httpResponse: HttpResponse = client.get(url) {
                onDownload { bytesSentTotal, contentLength ->
                    val progress = (bytesSentTotal * 100f / contentLength).roundToInt()
                    emit(progress)
                }
            }
            val responseBody: ByteArray = httpResponse.receive()
            file.writeBytes(responseBody)
        }
}

ただし、onDownloadは 1 回だけ呼び出され、ファイルはダウンロードされません。を削除する emit(progress)と動作します。

io.ktor:ktor-client-android:1.6.7

4

1 に答える 1