Намерение захвата изображения с камеры не возвращается в Galaxy Tab Limited Edition - PullRequest
5 голосов
/ 14 июня 2011

У меня проблемы с Galaxy Tab Limited Edition (Google I / O), когда я открываю камеру с намерением.

Это мой код:

Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageCaptureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new     
    File(mSavedFilePath)));
startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE);

Вкл.В Motorola Xoom этот код работает нормально.Но на Galaxy Tab 10.1 я никогда не получаю ответ от приложения камеры.

У меня нет трассировки стека, потому что у меня нет ошибки.

У кого-нибудь есть идеи?

Ответы [ 4 ]

3 голосов
/ 14 июня 2011

Вам не нужно разрешение камеры при запуске приложения к камере. Однако это очень фрагментированный процесс на платформе Android. у меня было много проблем с этим. в основном, если вы проверите дополнительный файл, который вы отправили в приложение камеры, вы заметите, что его размер равен 0 байт, когда возвращается результат. эта ошибка существует во многих устройствах Android, и вы можете обойти эту проблему, и именно в этом случае это не удается (это означает, что возвращаемый дополнительный вывод не возвращается, и если это так, то дополнительный файл не создается или имеет длину 0 тогда вам нужно получить Uri из намерения, например: intent.getData (), это вернет URI в файл, который в основном сформирован таким же образом, как Extra Output Uri, чтобы впоследствии вы могли использовать тот же подход для получения изображения .

Вы заметите, что изображение хранится в поставщике Media.Images и в каталоге камеры, и там указывается interi.getData () Uri.

Надеюсь, это поможет. Не забудьте проголосовать: D.

2 голосов
/ 28 июня 2011

Я тоже был очень разочарован этим.Однако я нашел (довольно жалкий) обходной путь.

Я должен сразу сказать, что я не использовал стандартное намерение ACTION_IMAGE_CAPTURE.Поскольку я хотел, чтобы изображение с камеры отображалось в окне, я использовал свой собственный макет и в качестве шаблона использовал следующее:

Как запрограммировать камеру Google Android для съемки

При нажатии на экран вызывается функция Camera.PictureCallback onPictureTaken (byte [] imageData, Camera c) , где я беру байт [], содержащий изображение.У меня есть глобальная переменная "byte [] MainApplication.snapshotBytes", которая назначается imageData из этой функции.

Теперь, когда данные были сохранены глобально и доступны для вызывающей операции, как должна действовать текущаяактивность будет прекращена таким образом, что вызывающая активность будет уведомлена?Ну, есть несколько способов, но я рано понял, что нажатие кнопки «назад» по-прежнему вызывает OnActivityResult (...) .Итак, я сделал следующее:

   if (imageData != null)
   {    
      MainApp.snapshotBytes = imageData;

      setResult(RESULT_OK);
      onBackPressed();
   }

Вызывающая активность теперь была ответственна еще за три вещи.

1: она устанавливает MainApp.snapshotBytes = null передзапуск камеры Activity.

2: Когда был вызван OnActivityResult (...) , он сначала проверял * resultCode == RESULT_OK *, а затем использовал данные изображения, которыебыл сохранен в глобальном MainApp.snapshotBytes.

3: Наконец, он снова установил MainApp.snapshotBytes = null , чтобы память могла быть возвращена GC.

Я буду первым, кто признает, что это kludge, но он работает и совместим с или без ошибки Camera-null-Intent.

Надеюсь, это поможет!

0 голосов
/ 14 сентября 2011

Похоже, это может быть связано с этим http://kevinpotgieter.wordpress.com/2011/03/30/null-intent-passed-back-on-samsung-galaxy-tab/

Существует еще один открытый вопрос , который может дать дополнительную информацию

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

Звучит как ошибка ...

Но на всякий случай, Вы включили в свой AndroidManifest.xml следующее ???

    <uses-permission android:name="android.permission.CAMERA"></uses-permission>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

Также вы можете попробовать использовать Намерение без дополнений.

    Intent imageCaptureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(imageCaptureIntent, REQUEST_IMAGE_CAPTURE);

Полученное растровое изображение будет меньше, но по крайней мере вы можете попробовать его, чтобы увидеть, работает ли оно. Надеюсь, это поможет.

С уважением,

...