Android Q - Как получить реальный путь к папке «Загрузки» - PullRequest
1 голос
/ 08 октября 2019

С Intent.ACTION_OPEN_DOCUMENT_TREE я получаю этот URI:

content://com.android.providers.downloads.documents/tree/downloads

Как я могу преобразовать его в /storage/emulated/0/Download - реальный путь? Я не хочу использовать

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

, потому что устарел.

РЕДАКТИРОВАТЬ: мне нужен реальный путь публичного расположения для загрузок, потому что на Android Q, этопапка, в которой должны храниться публичные документы.

1 Ответ

0 голосов
/ 08 октября 2019

Исходя из документов, используйте DCIM / ... для RELATIVE_PATH, где ... это то, чем будет ваш пользовательский подкаталог. Итак, вы должны получить что-то вроде этого:

  val resolver = context.contentResolver
  val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "CuteKitten001")
    put(MediaStore.MediaColumns.MIME_TYPE, "image/jpeg")
    put(MediaStore.MediaColumns.RELATIVE_PATH, "DCIM/PerracoLabs")
  }

  val uri = resolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues)

  resolver.openOutputStream(uri).use {
    // TODO something with the stream
  }

Обратите внимание, что поскольку RELATIVE_PATH является новым для API уровня 29, вам нужно будет использовать этот подход на более новых устройствах и использовать getExternalStoragePublicDirectory () на старых.

...