Intent.ACTION_GET_CONTENT 打开最近的文件,这给出了一个错误的 URI

Ali*_*eza 6 android android-intent android-contentresolver android-cursor

我正在使用Intent.ACTION_GET_CONTENT它打开最近的文件。从最近的文件中选择项目会产生错误的 URI,但从文件管理器中选择相同的文件会提供正确的 URI,可以由我的代码处理。

public static String getRealPathFromURI(Context context, Uri uri) {
    String path;
    if ("content".equals(uri.getScheme())) {
        Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        path = cursor.getString(idx);
        cursor.close();
    } else {
        path = uri.getPath();
    }

    return path;
}
Run Code Online (Sandbox Code Playgroud)

注意:uri.getPath()当我从最近的文件中选择 PDF 时的输出是/document/...但从文件管理器中选择相同的文件时,.../emulated/....

注意:从最近的文件中选择文件时的错误是

无法从 CursorWindow 读取第 0 行、第 -1 行。在访问 Cursor 中的数据之前,确保它已正确初始化。

Ali*_*eza 3

问题是我的代码无法处理 Android 的新布局存储 URI。如果你也遇到这个问题,请参考这个链接,因为作者写了一个很棒的方法来获取每个 URI 的真实路径。