Первичная директория Загрузка запрещена для медиа - PullRequest
0 голосов
/ 10 февраля 2020

Попытка сохранить файл PDF в каталоге загрузок, но после того, как getExternalStoragePublicDirectory полностью устарела после Android Q, невозможно сохранить файлы в каком-либо другом месте, кроме папки DCIM или Pictures, так как при возникновении следующего исключения пытается сохранить файл там.

IllegalArgumentException: первичная директория Загрузка запрещена для контента: // media / external / images / media; допустимые каталоги: [DCIM, изображения]

имеют следующий код.

private fun saveFile(input: ByteArray) {
    val fileName = "myFile.pdf"
    val outputStream = if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) {
        val directory = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
        val file = File(directory, fileName)
        FileOutputStream(file)
    } else {
        val resolver = context.contentResolver
        val contentValues = ContentValues().apply {
            put(MediaStore.MediaColumns.DISPLAY_NAME, fileName)
            put(MediaStore.MediaColumns.MIME_TYPE, "images/*")
            put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOWNLOADS)
        }
        resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)?.let {
            resolver.openOutputStream(it)
        }
    }
    outputStream?.use { stream ->
        stream.write(input)
    }
}

Очевидно, что при изменении пути на DIRECTORY_DCIM все работает как положено, но из-за требований файл должны быть сохранены в загрузках, как и ранее. Буду признателен за любую помощь.

1 Ответ

1 голос
/ 10 февраля 2020

Не был задан правильный Uri для сохранения файла, для загрузки это должно быть

resolver.insert(MediaStore.Downloads.EXTERNAL_CONTENT_URI, contentValues)

blackapps Спасибо за указание.

...