Android:从Android gallery应用程序中选择后从mediaStore获取路径

Android:从Android gallery应用程序中选择后从mediaStore获取路径,android,media-queries,android-gallery,mediastore,Android,Media Queries,Android Gallery,Mediastore,我试图返回存储在android手机中的真实照片路径。它在我的4.4.2手机上工作,但在使用5.0.2手机时,返回的路径为空 这是我从intent.getData获取真实照片路径作为Uri的代码( content://com.android.providers.media.documents/document/image%3A3061), 这是我启动gallery应用程序的代码: Intent intent = new Intent(); intent.setType("image

我试图返回存储在android手机中的真实照片路径。它在我的4.4.2手机上工作,但在使用5.0.2手机时,返回的路径为空

这是我从intent.getData获取真实照片路径作为Uri的代码( content://com.android.providers.media.documents/document/image%3A3061),

这是我启动gallery应用程序的代码:

Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),MobileConstant.newInstance().REQUEST_CODE_GALLERY);

从图库中拾取图像的意图

Intent intent = new Intent(Intent.ACTION_PICK,
    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
intent.setType("image/*");
startActivityForResult(intent, reqCode);  
In-onActivityResult方法

 @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            // TODO Auto-generated method stub
            super.onActivityResult(requestCode, resultCode, data);

            try {
                if (resultCode == Activity.RESULT_OK) {
                    if (requestCode == reqCode) {
                        if (data != null) {
                          String realPath=getRealPathFromURI(data.getData());
                        }
                    }
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }


private String getRealPathFromURI(Uri contentUri) {
        Cursor cursor = null;
        try {
            String[] proj = { MediaStore.Images.Media.DATA };
            cursor = getActivity().getContentResolver().query(contentUri, proj,
                    null, null, null);
            int column_index = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }
//从gallery或camrea获取图片
如果(Build.VERSION.SDK_INT<19){
意图=新意图();
intent.setType(“图像/jpeg”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(Intent.createChooser(Intent,“使用完成操作”),200);
}否则{
意向意向=新意向(意向.行动\打开\文件);
intent.addCategory(intent.CATEGORY\u可打开);
intent.setType(“图像/jpeg”);
startActivityForResult(意向,300);
}
受保护的void onActivityResult(int请求代码、int结果代码、意图数据){
super.onActivityResult(请求代码、结果代码、数据);
//结果
if(requestCode==200){
Uri selectedImage=data.getData();
Log.d(“Uri”,选择edimage.toString());
startCropImage(选择图像);
}
否则如果(请求代码==300){
Uri originalUri=data.getData();
final int takeFlags=data.getFlags()&(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
//无检查资源类型
getContentResolver().takePersistableUriPermission(originalUri,takeFlags);
Log.d(“Uri”,originalUri.toString());
startCropImage(originalUri);
}
}

我使用以下方法使其工作:

Cursor cursor = GlobalApplication.getContext().getContentResolver().query(photoUri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":")+ 1);
    cursor.close();

    cursor = GlobalApplication.getContext().getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;
//To get picture from gallery or camrea  
if (Build.VERSION.SDK_INT < 19) {
                Intent intent = new Intent();
                intent.setType("image/jpeg");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Complete action using"), 200);
            } else {
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("image/jpeg");
                startActivityForResult(intent, 300);
            }

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
//To get result
if (requestCode == 200) {
        Uri selectedImage = data.getData();
        Log.d("Uri", selectedImage.toString());
        startCropImage(selectedImage);
    }
    else if (requestCode == 300) {
        Uri originalUri = data.getData();
        final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        //noinspection ResourceType
        getContentResolver().takePersistableUriPermission(originalUri, takeFlags);
        Log.d("Uri", originalUri.toString());
        startCropImage(originalUri);
    }
}
Cursor cursor = GlobalApplication.getContext().getContentResolver().query(photoUri, null, null, null, null);
    cursor.moveToFirst();
    String document_id = cursor.getString(0);
    document_id = document_id.substring(document_id.lastIndexOf(":")+ 1);
    cursor.close();

    cursor = GlobalApplication.getContext().getContentResolver().query(
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
    cursor.moveToFirst();
    String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
    cursor.close();

    return path;