Android:从Android gallery应用程序中选择后从mediaStore获取路径
我试图返回存储在android手机中的真实照片路径。它在我的4.4.2手机上工作,但在使用5.0.2手机时,返回的路径为空 这是我从intent.getData获取真实照片路径作为Uri的代码( content://com.android.providers.media.documents/document/image%3A3061), 这是我启动gallery应用程序的代码: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
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;