Intent.ACTION_GET_CONTENT打开最近提供错误URI

时间:2015-08-24 08:03:07

标签: android android-intent android-cursor android-contentresolver

我使用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行,col -1。在从中访问数据之前,请确保Cursor已正确初始化。

1 个答案:

答案 0 :(得分:1)

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