Начиная с Android 10 (Q) Storage Access Framework устарел, как мы изначально сохраняли документы во внешнюю папку загрузки. Я пытаюсь создать PDF-документ, не спрашивая Android Запись разрешений для хранилища, каждый раз запрашивая пользователя. ему нужно скачать его. Но я не могу понять, как перенести PDF-файл (в памяти) непосредственно в Intent создания, не создавая объект File (Uri) и не упустив при этом главное - не создавать файл.
Вот мой код:
private fun requestPDF() {
val retrofit = Retrofit.Builder().baseUrl("foo")
.build()
val service = retrofit.create(PDFDownloadService::class.java)
val call = service.get("bar")
call.enqueue(object : Callback<ResponseBody> {
override fun onResponse(
call: Call<ResponseBody>,
response: Response<ResponseBody>
) {
if (response.isSuccessful) {
mPDF = response.body()!! // Complete PDF
DoAsync {
val uri = Uri.parse(mPDF.string()) // Code that I can't figure out
val intent = Intent(Intent.ACTION_CREATE_DOCUMENT).apply {
data = uri
type = "application/pdf"
putExtra(Intent.EXTRA_TITLE, "My PDF file")
addCategory(Intent.CATEGORY_OPENABLE)
}
(parentContext as MainActivity).startActivityForResult(intent, WRITE_REQUEST_CODE)
}
} else onFailure(call, Throwable("${response.code()}"))
}
override fun onFailure(call: Call<ResponseBody>, t: Throwable) {
Toast.makeText(
parentContext, "Error requesting PDF: ${t.message}",
Toast.LENGTH_LONG
).show()
}
})
}
Файл PDF создан, но имеет размер 0 КБ и не может быть открыт.
Google I / O 19 об этом topi c: https://youtu.be/3EtBw5s9iRY?t=1582
Будем благодарны за любые предложения о том, как поступить!