保存pdf Android studio 的权限

问题描述 投票:0回答:1

我创建了一个简单的应用程序,生成了 2 页的 pdf,现在我需要共享 pdf 并将其保存在设备中,因为我已经知道它需要权限才能执行此操作。

我对此很陌生,不知道该怎么做,所以我观看了一些教程并阅读了一些谷歌文章,发现权限内容和存储访问在 android 9-13 中多次更改,我的目标 sdk 版本是 29- 34.

我如何管理所有更改并请求权限? 我也找不到任何针对非媒体文件的许可。那么我是否需要许可?

android kotlin android-studio
1个回答
0
投票

此代码将帮助您了解存储 pdf 的五个想法

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { // To Download File for Android 10 and above
            val content = ContentValues().apply {
                put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
                put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS + "/ParentApps/")
            }
            val uri = context.contentResolver.insert(
                MediaStore.Downloads.EXTERNAL_CONTENT_URI,
                content
            )
            uri?.apply {
                val responseBody = getResponseBody(url)
                if (responseBody != null) {
                    responseBody.byteStream().use { inputStream ->
                        context.contentResolver.openOutputStream(uri)?.use { fileOutStream ->
                            writeOutStream(
                                inStream = inputStream,
                                outStream = fileOutStream,
                                contentLength = responseBody.contentLength(),
                                emitter = emitter
                            )
                        }
                        emitter.onComplete()
                    }
                } else {
                    emitter.onError(Throwable(errorMessage))
                }
            }
        } else { // For Android versions below than 10
            val directory = File(
                Environment.getExternalStoragePublicDirectory(
                    Environment.DIRECTORY_DOWNLOADS).absolutePath + "/ParentApps/"
            ).apply {
                if (!exists()) {
                    mkdir()
                }
            }
            val file = File(directory, fileName)
            val responseBody = getResponseBody(url)

            if (responseBody != null) {
                responseBody.byteStream().use { inputStream ->
                    file.outputStream().use { fileOutStream ->
                        writeOutStream(
                            inStream = inputStream,
                            outStream = fileOutStream,
                            contentLength = responseBody.contentLength(),
                            emitter = emitter
                        )
                    }
                    emitter.onComplete()
                }
            } else {
                emitter.onError(Throwable(errorMessage))
            }
        }
© www.soinside.com 2019 - 2024. All rights reserved.