Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在文件管理器中选择文件后更正实际路径_Android_Path_Uri_Realpath - Fatal编程技术网

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”,但可能有一种更简单(优雅)的方法来获取实际路径。

“此方法适用于大多数设备”--不,它不适用。除副本外,请参见和。您可能还对和感兴趣。