Я столкнулся с точно такой же проблемой,
Наконец, решение, которое я нашел, состояло в том, чтобы запустить намерение ACTION_GET_CONTENT вместо ACTION_PICK, а затем убедиться, что вы предоставили дополнительный MediaStore.EXTRA_OUTPUT с URI во временный файл.
Вот код для начала намерения:
public class YourActivity extends Activity {
File mTempFile;
int REQUEST_CODE_CHOOSE_PICTURE = 1;
(...)
public showImagePicker() {
mTempFile = getFileStreamPath("yourTempFile");
mTempFile.getParentFile().mkdirs();
Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mTempFile));
intent.putExtra("outputFormat",Bitmap.CompressFormat.PNG.name());
startActivityForResult(intent,REQUEST_CODE_CHOOSE_PICTURE);
}
(...)
}
Возможно, вам потребуется mTempFile.createFile ()
Тогда в onActivityResult вы сможете получить изображение таким образом
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
case REQUEST_CODE_CHOOSE_PICTURE:
Uri imageUri = data.getData();
if (imageUri == null || imageUri.toString().length() == 0) {
imageUri = Uri.fromFile(mTempFile);
file = mTempFile;
}
if (file == null) {
//use your current method here, for compatibility as some other picture chooser might not handle extra_output
}
}
Надеюсь, это поможет
Затем вы должны удалить свой временный файл по окончании (он находится во внутреннем хранилище как есть, но вы можете использовать внешнее хранилище, я думаю, это будет лучше).