从图库选择图片后根据Intent获取真实地址

通过Intent打开系统图库的方式可以选择以下:

Intent it = new Intent(Intent.ACTION_PICK,MediaStore.Images.Media.INTERNAL_CONTENT_URI);
activity.startActivityForResult(it, requestCode);
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
activity.startActivityForResult(Intent.createChooser(intent, "选择图片"),requestCode);

对于不同系统版本返回的Uri的格式是不一样的,即使是相同版本,在不同型号的手机中,得到的结果也不一致。所以与其判断Build.VERSION,不如直接判断Uri的内容。

@TargetApi(Build.VERSION_CODES.KITKAT)
public static String getPathByData(Activity context, Intent data) {
   if (data == null || data.getData() == null) {
       return null;
   }
   Uri uri = data.getData();
   String[] projection = {MediaStore.Images.Media.DATA};
   Cursor cursor = null;
   switch (uri.getScheme()) {
       case "file":
           cursor = context.getContentResolver().query(uri, projection, null, null, null);
           break;
       case "content":
           switch (uri.getHost()) {
               case "media":
                   cursor = context.getContentResolver().query(uri, projection, null, null, null);
                   break;
               case "com.android.providers.media.documents":
                   String wholeID = DocumentsContract.getDocumentId(uri);
                   String id = wholeID.split(":")[1];
                   String sel = MediaStore.Images.Media._ID + "=?";
                   cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                           projection, sel, new String[]{id}, null);
                   break;
               case "com.android.providers.downloads.documents":
                   String dId = DocumentsContract.getDocumentId(uri);
                   Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), Long.valueOf(dId));
                   cursor = context.getContentResolver().query(contentUri, projection, null, null, null);
                   break;
           }
           break;
   }
   String path;
   if (cursor != null) {
       cursor.moveToNext();
       int index = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
       path = cursor.getString(index);
       cursor.close();
   } else {
       path = uri.getPath();
   }
   return path;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值