原文:https://blog.csdn.net/jingzz1/article/details/106188462
//android10以上 uri转file uri转真实路径
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
File path = FileUtils.uriToFileApiQ(uri, this);
}
/**
* android10以上 uri转file uri转真实路径
* @param uri
* @param context
* @return
*/
@RequiresApi(api = Build.VERSION_CODES.Q)
public static File uriToFileApiQ(Uri uri, Context context) {
File file = null;
if(uri == null) return file;
//android10以上转换
if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) {
file = new File(uri.getPath());
} else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) {
//把文件复制到沙盒目录
ContentResolver contentResolver = context.getContentResolver();
String displayName = System.currentTimeMillis()+ Math.round((Math.random() + 1) * 1000)
+"."+ MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri));
try {
InputStream is = contentResolver.openInputStream(uri);
File cache = new File(context.getCacheDir().getAbsolutePath(), displayName);
FileOutputStream fos = new FileOutputStream(cache);
//android.os.FileUtils不是工具类,是Android的SDK方法
android.os.FileUtils.copy(is, fos);
file = cache;
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return file;
}