Прекрасный способ исправить ошибку с ACTION_IMAGE_CAPTURE - PullRequest
5 голосов
/ 30 июня 2011

Я столкнулся с проблемой: поведение цели 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). Если я попытаюсь получить фотографию через открытый временный файл, то фотография будет вставлена ​​в галерею и временный файл.
  • некоторые устройства не вставляют снятые фотографии в галерею - и я должен сделать это вручную
  • Я не знаю, но могут быть и другие сценарии

Итак, есть ли лучшие практики вУправление такими проблемами для широкого круга устройств и производителей?

В этом случае мне нужно взять фотографию с камеры, вставить ее в галерею, а затем получить фотографию в галерее.

1 Ответ

0 голосов
/ 30 июня 2011

На этот вопрос уже был дан ответ:

Не думаю, что вам стоит проверять другие случаи.Google и Android OEM отслеживают эти проблемы, поэтому сообщайте о них и, надеюсь, они будут исправлены.

...