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上一切正常。
答案 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
。