Unknown URL content://downloads/my_downloads Unknown URL content://downloads/my_downloads android android

Unknown URL content://downloads/my_downloads


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;            }


I have encountered the exception java.lang.IllegalArgumentException: Unknown URI: content://downloads/public_downloads/7505 in getting the doucument from the downloads. This solution worked for me.

else if (isDownloadsDocument(uri)) {            String fileName = getFilePath(context, uri);            if (fileName != null) {                return Environment.getExternalStorageDirectory().toString() + "/Download/" + fileName;            }            String id = DocumentsContract.getDocumentId(uri);            if (id.startsWith("raw:")) {                id = id.replaceFirst("raw:", "");                File file = new File(id);                if (file.exists())                    return id;            }            final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));            return getDataColumn(context, contentUri, null, null);        }

This the method used to get the filepath

   public static String getFilePath(Context context, Uri uri) {    Cursor cursor = null;    final String[] projection = {            MediaStore.MediaColumns.DISPLAY_NAME    };    try {        cursor = context.getContentResolver().query(uri, projection, null, null,                null);        if (cursor != null && cursor.moveToFirst()) {            final int index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);            return cursor.getString(index);        }    } finally {        if (cursor != null)            cursor.close();    }    return null;}


The exception is caused by disabled Download Manager. And there is no way to activate/deactivate Download Manager directly, since it's system application and we don't have access to it.

Only alternative way is redirect user to settings of Download Manager Application.

try {     //Open the specific App Info page:     Intent intent = new Intent(android.provider.Settings.ACTION_APPLICATION_DETAILS_SETTINGS);     intent.setData(Uri.parse("package:" + "com.android.providers.downloads"));     startActivity(intent);} catch ( ActivityNotFoundException e ) {     e.printStackTrace();     //Open the generic Apps page:     Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);     startActivity(intent);}