Android Q - How to get real path of Downloads folder

Viewed 4366

With Intent.ACTION_OPEN_DOCUMENT_TREE I get this uri :

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

How can I convert it to /storage/emulated/0/Download - the real path? I don't want use

Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

because is deprecated.

EDIT : I need real path of public location for downloads, because on android Q, this is the folder where should be stored public documents.

1 Answers

Based on the docs, use DCIM/... for the RELATIVE_PATH, where ... is whatever your custom subdirectory would be. So, you would wind up with something like this:

  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
  }

Note that since RELATIVE_PATH is new to API Level 29, you would need to use this approach on newer devices and use getExternalStoragePublicDirectory() on older ones.

Related