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信息

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

其子昱舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值