意图.ACTION_GET_CONTENT打开最近的文件,这会导致糟糕的URI。

9

我正在使用 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;
}

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

注意: 从最近文件中选择文件时出现错误:

无法从CursorWindow读取第0行、第-1列的数据。在访问数据之前,请确保正确初始化了游标。

1个回答

3
问题在于我的代码不能处理Android的新布局存储URI。如果您也遇到了这个问题,请参考此链接,因为作者编写了一种非常好的方法来获取每个URI的真实路径。

非常感谢!你提供的链接文章帮助我解决了问题。 - Armin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接