Android 在文件管理器中选择文件后更正实际路径
请提供帮助或建议。面对这样的问题。当我从设备(文件管理器)打开一个文件时,我无法始终获得正在处理的文件的真实路径 打开设备管理器以选择要下载的文件:Android 在文件管理器中选择文件后更正实际路径,android,path,uri,realpath,Android,Path,Uri,Realpath,请提供帮助或建议。面对这样的问题。当我从设备(文件管理器)打开一个文件时,我无法始终获得正在处理的文件的真实路径 打开设备管理器以选择要下载的文件: void LoadData(){ Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT); fileintent.setType("*/*"); startActivityForResult(fileintent, 1); } 得到结果: @Override p
void LoadData(){
Intent fileintent = new Intent(Intent.ACTION_GET_CONTENT);
fileintent.setType("*/*");
startActivityForResult(fileintent, 1);
}
得到结果:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (data == null){return;}
Uri uri = data.getData();
final String filepath = GetPath(uri);
FileReader file = new FileReader(filepath);
BufferedReader buffer = new BufferedReader(file);
...
}
处理实际路径的方法:
public String GetPath(Uri uri) {
String[] projection = { MediaStore.MediaColumns.DATA };
Cursor cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else
return "";
}
这种方法适用于大多数设备。结果Uri和实路径的格式如下: content://com.mi.android.globalFileexplorer.myprovider/external_files/Folder/file.csv /存储/模拟/0/文件夹/file.csv 但是,在某些设备上(特别是在某些三星手机上),这种方法不起作用。Uri是以这种格式获得的(因此我无法获得真实路径): content://com.android.externalstorage.documents/document/primary%3AFolder%2Ffile.csv
我可以使用其他方法处理结果分隔符“%3A”和“%2F”,但可能有一种更简单(优雅)的方法来获取实际路径。“此方法适用于大多数设备”--不,它不适用。除副本外,请参见和。您可能还对和感兴趣。