android 如何通过来自DownloadsProvider的uri获取图片真实路径?

写了一个需要获取图片真实路径的app,在API29运行,就是打开相册返回选中图片的uri,再通过uri获取真实路径,在网上查看了几篇文章,在从DownloadsProvider中获取真实路径的代码是下面这段:

String documentId = DocumentsContract.getDocumentId(uri);
if (isDownloadsDocument(uri)) {
    Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(documentId));
filePath = getDataColumn(context, contentUri, null, null);
}


然而问题是从DownloadsProvider中获取的uri的documentId都是“msf:+一个数字”的形式,例如“msf:25”,所以在Long.valueOf(documentId));这个地方就会报错,因为documentId不是纯数字而是包含英文的形式,但是我直接吧msf:这个非数字的部分去掉也不能获取到真实路径,所以应该是有另外某种转化方法可以获取到真实路径的。

但是为什么在网上查到的方法都是像上面代码这样会报错的方法,如果想从DownloadsProvider中获取真实路径应该怎么做呢?