Я столкнулся с проблемой: поведение цели ACTION_IMAGE_CAPTURE зависит от производителя оборудования.
Я думаю, лучший способ получить фотографию с камеры, вставленной в фотогалерею, должен выглядеть примерно так:
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, CAPTURE_IMAGE_REQUEST);
изатем получите uri в onActivityResult
:
switch (requestCode) {
case CAPTURE_IMAGE_REQUEST: {
if(resultCode == Activity.RESULT_OK) {
Uri uri = intent.getData();// content uri of photo in media gallery
//do something with this
}
break;
}
Но я вижу, что это не работает на многих устройствах;Более того, я обнаружил несколько различных сценариев поведения приложения «Камера»:
- на некоторых устройствах ошибка с этим событием, поэтому нет возможности получить полноразмерные фотографии, и вы можете получить 512 пикселейширокоформатная фотография с использованием файла tmp только в публичном каталоге
- некоторые устройства (включая мое) вставляют снятую фотографию в галерею, но не возвращают Uri.(getData () возвращает значение null, дополнительные функции намерения имеют только логический ключ 'define-data', value = true). Если я попытаюсь получить фотографию через открытый временный файл, то фотография будет вставлена в галерею и временный файл.
- некоторые устройства не вставляют снятые фотографии в галерею - и я должен сделать это вручную
- Я не знаю, но могут быть и другие сценарии
Итак, есть ли лучшие практики вУправление такими проблемами для широкого круга устройств и производителей?
В этом случае мне нужно взять фотографию с камеры, вставить ее в галерею, а затем получить фотографию в галерее.