ダウンロードの進行状況を 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