Я хочу написать модуль, в котором одним нажатием кнопки открывается камера, и я могу щелкнуть и сделать снимок. Если мне не нравится изображение, я могу удалить его и щелкнуть еще одно изображение, а затем выбрать изображение, и оно должно вернуться и отобразить это изображение в упражнении.
278
Ответы:
Вот пример действия, которое запустит приложение камеры, а затем извлечет изображение и отобразит его.
Обратите внимание, что само приложение камеры дает вам возможность просмотреть / повторно принять изображение, и как только изображение будет принято, действие отобразит его.
Вот макет, который использует вышеуказанное действие. Это просто LinearLayout, содержащий Button с идентификатором button1 и ImageView с идентификатором imageview1:
И еще одна заключительная деталь, обязательно добавьте:
и если камера не является обязательной для вашего приложения. убедитесь, что в требовании установлено значение false. как это
на ваш manifest.xml.
источник
<uses-feature/>
сandroid:required="false"
атрибутом:<uses-feature android:name="android.hardware.camera" android:required="false"></uses-feature>
Bitmap photo = (Bitmap) data.getExtras().get("data");
не захватывает изображение, которое было принято. Он захватывает миниатюру снятого изображения.Обновление (2020)
Google добавил новый
ActivityResultRegistry
API, который «позволяет вам обрабатывать потоки «startActivityForResult()
+ »onActivityResult()
и«requestPermissions()
+ »onRequestPermissionsResult()
без переопределения методов в вашей деятельности или фрагменте, обеспечивает повышенную безопасность типовActivityResultContract
и обеспечивает ловушки для тестирования этих потоков» - источник .API был добавлен в androidx.activity 1.2.0-alpha02 и androidx.fragment 1.3.0-alpha02 .
Теперь вы можете сделать что-то вроде:
Посмотрите документацию, чтобы узнать, как использовать новый API результатов действий: https://developer.android.com/training/basics/intents/result#kotlin
Есть много встроенных ActivityResultContracts, которые позволяют вам делать разные вещи, такие как выбор контактов, запрос разрешений, фотографировать или снимать видео. Вы, вероятно, заинтересованы в ActivityResultContracts.TakePicture, показанном выше.
Обратите внимание, что androidx.fragment 1.3.0-alpha04 не поддерживает API
startActivityForResult()
+onActivityResult()
иrequestPermissions()
+onRequestPermissionsResult()
для Fragment. Следовательно, кажется, чтоActivityResultContracts
это новый способ делать вещи отныне.Оригинальный ответ (2015)
Мне понадобилось несколько часов, чтобы заставить это работать. Код - это почти копия-вставка с developer.android.com , с небольшим отличием.
Запросите это разрешение на
AndroidManifest.xml
:На вашем
Activity
, начнем с определения этого:Затем запустите это
Intent
вonClick
:Добавьте следующий метод поддержки:
Тогда получите результат:
То, что заставило это работать, - то
MediaStore.Images.Media.getBitmap(this.getContentResolver(), Uri.parse(mCurrentPhotoPath))
, что отличается от кода от developer.android.com . Оригинальный код дал мнеFileNotFoundException
.источник
android.os.FileUriExposedException: file:///storage/emulated/0/Pictures/JPEG_20180823_102340_722874009725833047.jpg exposed beyond app through ClipData.Item.getUri()
. Есть идеи, как это исправить? @AlbertVilaCalvostorageDir = Context.getFilesDir();
вместо файлаstorageDir = Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES);
. В противном случае я получаю ошибку «Отказано в разрешении».Захват фото + Выберите из галереи:
источник
ResultCode == 1
внутриResultCode == RESULT_OK
?requestCode==1
помогает определить, кто инициировал запрос.Я знаю, что это довольно старый поток, но все эти решения не завершены и не работают на некоторых устройствах, когда пользователь поворачивает камеру, потому что данные в onActivityResult равны нулю. Итак, вот решение, которое я протестировал на многих устройствах и до сих пор не сталкивался с какими-либо проблемами.
Сначала объявите переменную Uri в своей деятельности:
Затем создайте временную папку для хранения захваченного изображения и сделайте попытку захвата изображения камерой:
И теперь наступает одна из самых важных вещей: вам нужно сохранить ваш uriFilePath в onSaveInstanceState, потому что, если вы этого не сделали и пользователь повернул свое устройство во время использования камеры, ваш URI был бы нулевым.
После этого вы всегда должны восстанавливать свой URI в вашем методе onCreate:
И вот последняя часть, чтобы получить ваш Uri в onActivityResult:
PS Не забудьте добавить разрешения для Camera и Ext. хранение записи в ваш манифест.
источник
Здесь вы можете открыть камеру или галерею и установить выбранное изображение в viewview
Добавить разрешения в манифест
В onCreate ()
Показать диалоговое окно параметров (чтобы выбрать изображение с камеры или галереи)
Получить фото из галереи
Получить фото с камеры
Как только изображение будет выбрано или захвачено,
Теперь пришло время сохранить картину
Просить разрешение
источник
Вы должны прочитать о камере . (Я думаю, чтобы сделать то, что вы хотите, вам нужно сохранить текущее изображение в вашем приложении, выполнить там выбор / удаление и затем вызвать камеру, чтобы повторить попытку, вместо того, чтобы повторить попытку прямо внутри камеры.)
источник
Вот код, который я использовал для захвата и сохранения изображения с камеры, затем отобразил его для просмотра изображений. Вы можете использовать в соответствии с вашими потребностями.
Вы должны сохранить изображение с камеры в определенном месте, затем извлечь из этого места, а затем преобразовать его в байтовый массив.
Вот метод для открытия захвата изображения с камеры.
тогда ваш метод onActivityResult () должен быть таким:
Вот метод getBitmap (), используемый в onActivityResult (). Я сделал все улучшения производительности, которые могут быть возможны при получении растрового изображения с камеры.
Надеюсь, поможет!
источник
Захват фото с камеры + выбрать изображение из галереи и установить его в качестве фона макета или просмотра изображений. Вот пример кода.
источник
В деятельности:
в layout.xml:
в manifest.xml:
источник
Вы можете использовать пользовательскую камеру с миниатюрой изображения. Вы можете посмотреть мой проект .
источник
Я создал диалог с возможностью выбрать изображение из галереи или камеры. с обратным вызовом как
Сначала мы должны определить разрешение в AndroidManifest, так как нам нужно написать внешнее хранилище при создании файла и чтении изображений из галереи.
Создайте файл file_paths xml в app / src / main / res / xml / file_paths.xml
с пути
Затем нам нужно определить провайдер файла, чтобы сгенерировать Content uri для доступа к файлу, хранящемуся во внешнем хранилище.
Dailog Layout
ImagePicker Dailog
}
Позвоните в Activity или фрагмент как этот Определите ImagePicker в Fragment / Activity
Затем вызовите Dailog по нажатию кнопки
источник
Вот полный код:
Не забудьте добавить разрешения для камеры тоже.
источник
Вы можете использовать этот код для прослушивания onClick (вы можете использовать ImageView или кнопку)
Для отображения в вашем imageView
Примечание: вставьте это в манифест
источник
Используйте следующий код для захвата изображения с помощью мобильной камеры. Если вы используете Android с версией выше, чем Lolipop, вы также должны добавить запрос на разрешение.
источник
Bitmap photo = (Bitmap) data.getExtras().get("data");
получает эскиз с камеры. Есть статья о том, как сохранить картинку на внешнем хранилище с камеры. полезная ссылкаисточник
Пожалуйста, следуйте этому примеру с этой реализацией, используя поддержку Kotlin и Andoirdx:
И результат деятельности:
Вы можете получить более подробную информацию в https://github.com/joelmmx/take_photo_kotlin.git
Я надеюсь, что это поможет вам!
источник