До введения хранилища с ограниченным объемом я использовал Диспетчер загрузок для загрузки PDF-файла в свое приложение и получения PDF-файла из getExternalStorageDirectory
, но из-за ограниченного хранилища я больше не могу использовать getExternalStorageDirectory
, поскольку он устарел. Я решил отказаться от диспетчера загрузок, так как он загружает файлы в каталог publi c и вместо этого использовать модификацию для загрузки файла PDF. Я знаю, что могу использовать тег requiredLegacyStorage
в манифесте Android, но он неприменим к 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.