Ответ 1
Я столкнулся с той же проблемой,
Наконец, решение, которое я нашел, состояло в том, чтобы запустить 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
}
}
Надеюсь, что это поможет
Затем вы должны удалить свой временный файл при завершении (он находится во внутреннем хранилище, как есть, но вы можете использовать внешнее хранилище, я думаю, было бы лучше).