当从文件浏览器的“最近”部分选择文件时,无法直接从内容URI获取文件路径。这是因为在Android的最新版本中,内容提供器被用于访问文件,而不是直接的文件路径。
解决这个问题的一种方法是使用内容解析器来获取文件的真实路径。以下是一个示例代码,可以从内容URI中获取文件路径:
public String getRealPathFromURI(Context context, Uri uri) {
String filePath = "";
if (uri.getScheme().equalsIgnoreCase("content")) {
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
int index = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
filePath = cursor.getString(index);
cursor.close();
}
} else {
filePath = uri.getPath();
}
return filePath;
}
在上面的代码中,我们首先检查URI的方案是否是“content”。如果是,我们使用内容解析器查询该URI,并在返回的游标中查找包含文件路径的列。如果URI的方案不是“content”,则我们假定它是一个文件路径,并直接返回它。
要使用上述方法,您只需要将上述代码复制到您的Android项目中,并在需要获取文件路径的地方调用getRealPathFromURI(context, uri)
方法。其中,context
是您的上下文对象,uri
是表示选择的文件的内容URI。
请注意,上述代码仅适用于访问图片文件。如果您需要访问其他类型的文件,如音频或视频文件,您需要相应地更改查询的列。