Android 6.0。库中的图像文件已创建,但它为空

时间:2017-02-25 16:10:59

标签: android

Android 6.0。

 <uses-sdk
    android:minSdkVersion="15"
    android:targetSdkVersion="15" />

我想从图库中选择图片时获取uri到临时文件:

在我的片段中:

点击从图库中选择时:

 private void choosePhotoFromGallery() {
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    photoPickerIntent.setType("image/*");
    photoPickerIntent.putExtra("crop", "true");
    Uri tempUri = Uri.fromFile(getTempFile();
    photoPickerIntent.putExtra(MediaStore.EXTRA_OUTPUT, tempUri);
    photoPickerIntent.putExtra("outputFormat", BitmapUtil.BITMAP_COMPRESS_FORMAT.toString());
    startActivityForResult(photoPickerIntent, SELECT_PHOTO);
}

行。当我成功选择图像时,文件 tempUri 成功创建但是大小= 0.所以当调用此方法时:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == SELECT_PHOTO && resultCode == Activity.RESULT_OK) {
        Uri tempUri = Uri.fromFile(getTempFile());
        beginCrop(tempUri);
    }
}

无法裁剪,因为文件 tempUri 存在,但它是空的。此问题仅适用于Android 6.0及更高版本。在Android 4.0上一切正常。

1 个答案:

答案 0 :(得分:0)

  

在Android 4.0上一切正常。

也许它适用于您尝试过的一台设备。有大约20亿台Android设备,分布在数千种设备型号上。这些将包含数十个(如果不是数百个)为ACTION_PICK内容提供MediaStore的不同应用。

而且,对于大多数这些设备,您的代码正在做出无效的假设:

  • crop

  • 没有ACTION_PICK额外费用
  • ACTION_PICK不使用MIME类型

  • EXTRA_OUTPUT

  • 没有ACTION_PICK额外费用
  • outputFormat

  • 没有ACTION_PICK额外费用
  • getTempUri()ACTION_PICK毫无意义,至少就用户选择的内容而言毫无意义,因为ACTION_PICK通过Uri返回Intent }已发送至onActivityResult()

ACTION_PICK协议涵盖了ACTION_PICK协议。

现在,完全可能的是,您的未记录的内容实际上可以用于少数设备。您可以尝试将应用的分发限制为仅限于那些设备......但如果用户安装了为MediaStore提供data.getData()的其他应用,那么您仍然不幸,因为应用程序可能不支持您的未记录的内容。

因此,摆脱未记录的内容,并使用onActivityResult()中的Uri获取用户选择的内容src/main/resources