Android MediaStore.MediaColumns.DATA已弃用,contentResolver.openAssetFileDescriptor(uri,“r”)花费了大量时间。如何检查Uri是否存在?

Android MediaStore.MediaColumns.DATA已弃用,contentResolver.openAssetFileDescriptor(uri,“r”)花费了大量时间。如何检查Uri是否存在?,android,android-10.0,scoped-storage,Android,Android 10.0,Scoped Storage,我使用File.exsits()检查File路径是否由MediaStore.MediaColumns.DATA提供。但现在(从Android10开始),MediaStore.MediaColumns.DATA已被弃用。所以我使用ContentResolver.openAssetFileDescriptor(uri,“r”)检查它是否存在。但是ContentResolver.openAssetFileDescriptor(uri,“r”)花费了更多的时间 下面的代码片段显示了我现在是如何检查它的。

我使用
File.exsits()
检查
File
路径是否由
MediaStore.MediaColumns.DATA
提供。但现在(从Android10开始),
MediaStore.MediaColumns.DATA
已被弃用。所以我使用
ContentResolver.openAssetFileDescriptor(uri,“r”)
检查它是否存在。但是
ContentResolver.openAssetFileDescriptor(uri,“r”)
花费了更多的时间

下面的代码片段显示了我现在是如何检查它的。但我不知道在
作用域外部存储中,
每次都能正确获取
MediaStore.MediaColumns.DATA
File.exsits()的返回值。谁有更好的办法来解决这个问题?谢谢

。。。
字符串路径=cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DATA));
Uri=ContentURI.withAppendedId(前缀,cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
ContentResolver ContentResolver=context.getContentResolver();
AssetFileDescriptor AssetFileDescriptor=null;
试一试{
//虽然不推荐使用path,但首先使用path检查文件是否存在,因为openAssetFileDescriptor需要花费很长时间
//我找不到其他方法。
if(TextUtils.isEmpty(path)){
assetFileDescriptor=contentResolver.openAssetFileDescriptor(uri,“r”);
if(assetFileDescriptor==null){
返回null;
}
}否则{
文件=新文件(路径);
如果(!file.exists()){
path=null;
assetFileDescriptor=contentResolver.openAssetFileDescriptor(uri,“r”);
if(assetFileDescriptor==null){
返回null;
}
}
}
}捕获(例外e){
返回空
}最后{
FileUtil.close静默(assetFileDescriptor);
}
....

只需尝试在uri上打开一个InputStream。
DocumentFile.fromSingleUri(…).exists()
,其中
是您的文档
uri
@blackapps open InputStream花费的时间比File.exsity您无法使用File.exists()。所以你说的没有道理。@blackapps我的手机里有1000张照片。如果我使用
File.exists
,它将花费大约500毫秒,但是如果我尝试打开inputStream,它将花费4秒。只要尝试在uri上打开inputStream即可。
DocumentFile.fromSingleUri(…).exists()
,其中,
是您的文档
Uri
@blackapps open inputStream花费的时间比File.exsitsy您不能使用File.exists()。所以你说的没有道理。@blackapps我的手机里有1000张照片。如果我使用
File.exists
,它将花费大约500毫秒,但是如果我尝试打开inputStream,它将花费4秒。