For those who are getting Error Unknown URI: content://downloads/public_downloads
. I managed to solve this by getting a hint given by @Commonsware in this answer. I found out the class FileUtils on GitHub. Here InputStream
methods are used to fetch file from Download
directory.
// DownloadsProvider else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); if (id != null && id.startsWith("raw:")) { return id.substring(4); } String[] contentUriPrefixesToTry = new String[]{ "content://downloads/public_downloads", "content://downloads/my_downloads", "content://downloads/all_downloads" }; for (String contentUriPrefix : contentUriPrefixesToTry) { Uri contentUri = ContentUris.withAppendedId(Uri.parse(contentUriPrefix), Long.valueOf(id)); try { String path = getDataColumn(context, contentUri, null, null); if (path != null) { return path; } } catch (Exception e) {} } // path could not be retrieved using ContentResolver, therefore copy file to accessible cache using streams String fileName = getFileName(context, uri); File cacheDir = getDocumentCacheDir(context); File file = generateFileName(fileName, cacheDir); String destinationPath = null; if (file != null) { destinationPath = file.getAbsolutePath(); saveFileFromUri(context, uri, destinationPath); } return destinationPath; }