在引入作用域存储之前,我使用下载管理器在我的应用程序中下载PDF并从getExternalStorageDirectory
获取PDF,但由于作用域存储的原因,我不能再使用已被弃用的getExternalStorageDirectory
方法。我决定放弃使用下载管理器,因为它将文件下载到公共目录,而是改用Retrofit来下载PDF文件。
我知道我可以在Android清单中使用requiredLegacyStorage
标签,但这对Android 11不适用,所以我不使用它。
以下是我的代码:
fun readAndDownloadFile(context: Context) {
readQuraanInterface?.downloadFile()
Coroutines.io {
file = File(context.filesDir,"$DESTINATION_DIRECTORY/$FILE_NAME$FILE_EXTENSION")
if (file?.exists() == true) {
renderPDF()
showPdf(mPageIndex, Direction.None)
} else {
Log.i("new","new0")
val response = readQuraanRepository.downloadPdf()
if (response.isSuccessful) {
Log.i("new","new00 ${file!!.path} ${response.body()?.byteStream().toString()}")
response.body()?.byteStream()?.let {
file!!.copyInputStreamToFile(
it
)
}
Log.i("new","new1")
// renderPDF()
// showPdf(mPageIndex, Direction.None)
} else {
Log.i("new","new2")
Coroutines.main {
response.errorBody()?.string()
?.let { readQuraanInterface?.downloadFailed(it) }
}
}
}
}
}
private fun File.copyInputStreamToFile(inputStream: InputStream) {
this.outputStream().use { fileOut ->
Log.i("new","new30")
inputStream.copyTo(fileOut)
}
}
虽然 PDF 已经被下载,但是使用我编写的 InputStream 助手函数时文件从未被存储。我需要将该 PDF 添加到应用程序的内部存储并进行呈现,而我正在使用 PDFRenderer 进行呈现。
renderPDF()
?为什么这个函数没有路径参数? - blackapps