我正在写应用程序中要查找URI实际文件路径的部分。但是,当从文件选择器的“音频”选项卡打开文件时无法识别它时,URI格式不同,因为uri的isMediaDocument或isDownloadsDocument格式不同,因此我编写的代码仅用于isExternalStorageDocument。如何从这些格式不同的URI中获取真实的文件路径。
代码如下:
if (DocumentsContract.isDocumentUri(context.getApplicationContext(), uri)) {
if (isExternalStorageDocument(uri)) {
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
final String type = split[0];
File fileList[] = new File("/storage/").listFiles();
for (File file : fileList) {
if (!file.toString().contains("self") && !file.toString().contains("emulated")) {
sdPath = file.toString();
System.out.println("SD PATH SUCCESSFULLY IDENTIFIED!: " + sdPath);
}
sdCheck(uri);
}
System.out.println(removableStoragePath);
return removableStoragePath + "/" + split[1];
} else if(isMediaDocument(uri)){
String pathUtil = uri.getPath();
System.out.println("Media document: " + pathUtil);
final String docId = DocumentsContract.getDocumentId(uri);
final String[] split = docId.split(":");
File fileList[] = new File("/storage/").listFiles();
for (File file : fileList) {
if (file.toString().contains("self") || file.toString().contains("emulated")) {
sdPath = file.toString();
System.out.println("SD PATH SUCCESSFULLY IDENTIFIED!: " + sdPath);
}
sdCheck(uri);
}
System.out.println(removableStoragePath);
return removableStoragePath + "/" + split[1];
}
else if (isDownloadsDocument(uri)){
Toast.makeText(context, "Cannot Use Downloads Tab", Toast.LENGTH_LONG).show();
}