画廊意图问题中的文件不存在?

File does not exist from gallery intent issue?

我正在使用 ACTION_PICK 意图从画廊获取图像:-

    Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(intent, 112);

在 onActivityResult() 中,我通过 getData() 获取图像,其中 returns 我的 uri :- /external/images/media/6097

现在,当我通过 imageview 的 setImageUri() 方法在 imageview 中设置此 uri 时,图像正在显示,但是当我创建文件对象以通过 :-[=17 将此图像上传到服务器时=]

File imageFile = new File(uri);

提示文件不存在。 imageFile.exists() 返回 false。

不知道哪里出了问题。我已经在 genymotion 和设备上尝试过,但结果是一样的。 在清单中,我已授予权限:-

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

尝试从 uri 获取绝对路径并使用绝对路径而不是 uri 创建文件实例:

 public String getAbsolutePath(Uri uri) {
        if (Build.VERSION.SDK_INT >= 19) {
            String id = "";
            if (uri.getLastPathSegment().split(":").length > 1)
                id = uri.getLastPathSegment().split(":")[1];
            else if (uri.getLastPathSegment().split(":").length > 0)
                id = uri.getLastPathSegment().split(":")[0];
            if (id.length() > 0) {
                final String[] imageColumns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
                Uri tempUri = getUri();
                Cursor imageCursor = getContentResolver().query(tempUri, imageColumns, MediaStore.Images.Media._ID + "=" + id, null, null);
                if (imageCursor.moveToFirst()) {
                    return imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
                } else {
                    return null;
                }
            } else {
                return null;
            }
        } else {
            String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.ORIENTATION};
            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 null;
        }

    }
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == getActivity().RESULT_OK) {

             if (requestCode == SELECT_PICTURE) {

                Uri selectedImageUri = data.getData();

                String[] filePathColumn = {MediaStore.Images.Media.DATA};
                Cursor cursor = getActivity().getContentResolver().query(selectedImageUri,
                        filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String picturePath = cursor.getString(columnIndex);
                cursor.close();
                if (!TextUtils.isEmpty(picturePath)) {
                    Log.v(TAG, "SELECT_PICTURE... " + picturePath);
                   }
            }
        } else {
            Toast.makeText(getActivity(), " File discarded...", Toast.LENGTH_LONG).show();
        }
    }