Android基础篇 获取图库中图片路径返回不同
Posted 彭老希
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android基础篇 获取图库中图片路径返回不同相关的知识,希望对你有一定的参考价值。
一、例子
/** 从相册选择 */
private void choseHeadImageFromGallery() {
Intent intentFromGallery = new Intent();
/** 选择图片 */
intentFromGallery.setType("image/*");
intentFromGallery.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intentFromGallery,CODE_GALLERY_REQUEST);
}
/** 打开相机选择 */
private void choseHeadImageFromCameraCapture() {
Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT,photo);
startActivityForResult(intentFromCapture, CODE_CAMERA_REQUEST);
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent intent) {
if (resultCode == RESULT_CANCELED) {
Toast.makeText(getActivity(), "取消", Toast.LENGTH_LONG).show();
return;
}
switch (requestCode) {
case CODE_GALLERY_REQUEST: //图库
if(intent!=null){
Uri uri = intent.getData();
String path=uri.getPath();
Bitmap bitmap =null;
//修改之后 关键这里,是获取到bitmap
try {
bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
} catch (IOException e) {
e.printStackTrace();
}
if(bitmap!=null)
ImageTools.savePhotoToSDCard(bitmap,Environment.getExternalStorageDirectory().getAbsolutePath(), "image");
img.setScaleType(ImageView.ScaleType.CENTER_CROP);
img.setImageURI(uri);
}
break;
case CODE_CAMERA_REQUEST: //相机
if (intent != null) {
Bitmap bitmap=intent.getParcelableExtra("data");
img.setImageBitmap(bitmap);
img.setScaleType(ImageView.ScaleType.CENTER_CROP);
ImageTools.savePhotoToSDCard(bitmap,Environment.getExternalStorageDirectory().getAbsolutePath(), "image");
}
break;
}
}
Uri 标准格式,从图库中返回的是Uri
Uri uri = intent.getData();
String path=uri.getPath();
结果:
1、content://media/external/images/media/801893 (uri.toString)
2、/external/images/media/801893 (uri.getPath())
二、Uri的基本格式:
scheme://host:port/[ path| pathPrefix| pathPattern]
Scheme: Uri的模式,比如 http,file,content如果不指定scheme,那么这个Uri其他的参数也无效
Host:Uri的主机名,比如 www.baidu.com 如果host未指定,Uri无效
Port: Uri的端口号,比如80
Path: 完整的路径信息
pathPattern: 也表示完整的路径信息,但是它里面的可以包含通配符”*”
pathPrefix: 表示路径前缀信息
三、Uri与Path的区别:
以手机中的一张图为例
Uri:content://media/external/images/media/75935
Path:/storage/emulated/0/DCIM/Camera/1450768509653.jpg
通过观察数据库,可以帮助理解Uri的意义
images位于external.db
Uri中path就是数据库中的ID信息
以上是关于Android基础篇 获取图库中图片路径返回不同的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin Android - 从图库中选择图像并获取其路径
data.getData() 在 OnActvityResult 中返回 null,同时从相机和图库中获取/选择图片