Android相册选取图片

目前从图库选择图片可以有两种方法:

以下结果属于vivo Xplay,Android Version 4.4.4测试结果,如果有其他机型测试我会补充
1.Intent.ACTION_PICK:

Intent intent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, PHOTO_PICK);

onActivityResult返回的Intent中:

  • intent.getData()会返回所选图片的Uri,格式为content://media/external/images/media/919
  • intent.getExtras()返回的bundle中包含一个boolean变量,通过data.getExtras().get("isFinishGallery")获取,应该是指是否获取完毕,查询文档没有官方结果。
  • intent.putExtra("return-data",false)对返回值没有影响。

2.Intent.ACTION_GET_CONTENT

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");//不加会导致crash

onActivityResult返回的Intent中:

  • intent.getData()返回所选图片的Uri:

关于返回Uri格式的说明:

  • 系统版本大于等于19(KitKat):content://com.android.providers.media.documents/document/image%3A919

  • 系统版本低于19:content://media/external/images/media/919

可以通过以下函数获取真实路径:

    private String getRealPathFromURI(Context context,Uri contentUri) {
        String[] proj = { MediaStore.Images.Media.DATA };
        Cursor cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
        if (cursor != null) {
            cursor.moveToFirst();
            int columnIndex = cursor.getColumnIndex(proj[0]);
            String path = cursor.getString(columnIndex);
            cursor.close();
            return path;
        }
        return contentUri.getPath();
       }
  1. Uri获取bitmap的方法可以参考Bitmap相关:读取大图片.