Android 从摄影机恢复真实路径';s图片

Android 从摄影机恢复真实路径';s图片,android,Android,我正在从相机拍摄照片并保存在一个公共文件夹(Pictures/myFolder)中,我正在存储照片中的Uri以重新加载到我的视图中,但我需要构建一个具有真实路径的文件,但我无法恢复路径,并且他们在internet上找到的所有代码都给了我空指针,我如何恢复真实路径 Uri示例: content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827

我正在从相机拍摄照片并保存在一个公共文件夹(Pictures/myFolder)中,我正在存储照片中的Uri以重新加载到我的视图中,但我需要构建一个具有真实路径的文件,但我无法恢复路径,并且他们在internet上找到的所有代码都给了我空指针,我如何恢复真实路径

Uri示例

content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827_114154_460340375.jpg/images/media
不起作用的方法

public String getRealPathFromURI(Uri uri) {
String path = "";
if (getContentResolver() != null) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    if (cursor != null) {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
        path = cursor.getString(idx);
        cursor.close();
    }
}
return path;
}

参考:


我使用以下代码从Uri获取文档的真实路径:

/**
 * Retrieve filename from Uri
 *
 * @param uri             Uri following the schemes: "file" or "content"
 * @param contentResolver ContentResolver to resolve content scheme
 *
 * @return filename if operation succeded. Can be null.
 */
public static String getFileName(@NonNull final Uri uri, @NonNull final ContentResolver contentResolver) {
    String filename = "";
    if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
        filename = uri.getLastPathSegment();
    } else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        try {
            Cursor cursor = contentResolver.query(uri, null, null, null, null);
            int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
            cursor.moveToFirst();
            filename = cursor.getString(index);
            cursor.close();
        } catch (Exception e) {
            Log.e(TAG, "Exception when retrieving file name: " + e.getMessage());
        }
    }

    return filename;
}

相同错误:android.database.CursorIndexOutOfBoundsException:Requested column:-1,共列数:0相同错误:android.database.CursorIndexOutOfBoundsException:Requested column:-1,共列数:0使用日志打印uri.getPath()和uri.toString()输出@FelipeCustódior,并确保您获得了读取外部存储权限我非常确定,因为我有权限检查,我正在安卓22
content://media/content://br.com.technolog.darwinchecklist.fileprovider/darwin_checklist_images/DARWIN_20180827_114154_460340375.jpg/images/media
似乎不对。您希望在
DARWIN\u 20180827\u 114154\u 460340375.jpg
文件中找到
/images/media
文件夹。
/**
 * Retrieve filename from Uri
 *
 * @param uri             Uri following the schemes: "file" or "content"
 * @param contentResolver ContentResolver to resolve content scheme
 *
 * @return filename if operation succeded. Can be null.
 */
public static String getFileName(@NonNull final Uri uri, @NonNull final ContentResolver contentResolver) {
    String filename = "";
    if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) {
        filename = uri.getLastPathSegment();
    } else if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme())) {
        try {
            Cursor cursor = contentResolver.query(uri, null, null, null, null);
            int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
            cursor.moveToFirst();
            filename = cursor.getString(index);
            cursor.close();
        } catch (Exception e) {
            Log.e(TAG, "Exception when retrieving file name: " + e.getMessage());
        }
    }

    return filename;
}