Android:从图库中获取照片总是返回位图而不是uri

时间:2017-03-30 22:37:36

标签: android uri android-bitmap android-gallery

我致电:

Intent intent = new Intent(Intent.ACTION_PICK,
                MediaStore.Images.Media.INTERNAL_CONTENT_URI);
        intent.setType("image/*");
        intent.putExtra("crop", "true");
        intent.putExtra("scale", true);
        intent.putExtra("outputX", 256);
        intent.putExtra("outputY", 256);
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        intent.putExtra("return-data", true);

startActivityForResult(intent, code);

然后在我的ActiviyResult()中:

if (requestCode == RESULT_LOAD_IMAGE && data != null) {

                final Bundle extras = data.getExtras();
                if (extras != null) {
                //Get image
                Bitmap profilePicBitmap = extras.getParcelable("data");
                  ...

我试图通过这样做来获取uri:

data.getData()

但它总是返回null

问题是我需要设备上的位图路径,所以我可以将其上传到别处...但我无法将其转换为uri而无法获得它的路径。要转换为uri,您必须请求写入外部存储空间的权限,请参阅此处:(http://stackoverflow.com/questions/12555420/how-to-get-a-uri-object-from-bitmap),我希望避免这种情况。

1 个答案:

答案 0 :(得分:0)

  

但它总是返回null

该行为将取决于设备及其应用程序。

我怀疑如果你摆脱那些没有证件的演员,你会有更好的运气。据推测,您尝试让ACTION_PICK活动进行裁剪,而不是使用图像裁剪库。这有两个问题:

  1. ACTION_PICK活动不需要进行任何裁剪,因为这些额外内容不属于Android SDK。

  2. 我的猜测是,由于裁剪后的图片不作为文件存在,因此他们会通过"data"附加内容返回它(这也是ACTION_PICK记录的行为之外的内容)

  3. 所以,摆脱那些额外的东西。如果要裁剪图像,请use an image-cropping library