Как создать PDF-документ из ResponseBody в API Intent Android 29 - PullRequest
0 голосов
/ 17 февраля 2020

Начиная с 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

Будем благодарны за любые предложения о том, как поступить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...