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