То, что я пытаюсь сделать, кажется очень простым, но после нескольких дней поиска я не могу понять это.
У меня есть приложение, которое позволяет пользователю выбрать несколько (до 5) изображений. Я использую ImageView
. Когда пользователь нажимает на ImageView
, я бы хотел, чтобы он мог
- Выберите изображение из галереи или
- Используйте камеру для захвата изображения.
Я начал с использования ACTION_GET_CONTENT
намерения, и это хорошо работает, чтобы попасть в галерею. Тогда я попытался использовать ACTION_PICK_ACTIVITY
намерение, чтобы позволить пользователю выбрать камеру или галерею:
Intent pickIntent = new Intent(Intent.ACTION_PICK_ACTIVITY);
Intent gallIntent=new Intent(Intent.ACTION_GET_CONTENT);
gallIntent.setType("image/*");
Intent camIntent = new Intent("android.media.action.IMAGE_CAPTURE");
pickIntent.putExtra(Intent.EXTRA_INTENT, camIntent);
pickIntent.putExtra(Intent.EXTRA_INTENT, gallIntent)
pickIntent.putExtra(Intent.EXTRA_TITLE, "Select Source");
startActivityForResult(pickIntent, IMAGE_SELECTOR);
Но, похоже, я могу добавить только один EXTRA_INTENT
. Меню отображается, как и ожидалось, но единственными параметрами являются Галерея и Файлы .... нет камеры).
Есть ли лучший / более простой способ сделать это, что я скучаю? Спасибо за любую помощь.
Ответы:
Вам нужно будет создать свой собственный диалог выбора, объединяющий оба результата разрешения намерения.
Для этого вам нужно будет запросить PackageManager с помощью PackageManager.queryIntentActivities () для обоих исходных намерений и создать окончательный список возможных Интентов с одним новым Намерением для каждого извлеченного действия, например:
(Я написал это прямо здесь, так что это может не скомпилироваться)
Затем для получения дополнительной информации о создании настраиваемого диалога из списка см. Https://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog
источник
Как запустить одно намерение для выбора изображений из галереи или камеры, или из любого приложения, зарегистрированного для просмотра файловой системы.
Вместо того, чтобы создавать диалог со списком параметров Intent, гораздо лучше использовать Intent.createChooser, чтобы получить доступ к графическим значкам и коротким именам различных приложений «Камера», «Галерея» и даже сторонних приложений для файловой системы браузера. такие как «Астро» и др.
Здесь описывается, как использовать стандартную цель выбора и добавить к ней дополнительные намерения.
источник
final String fname = Utils.getUniqueImageFilename();
не работает ... он говоритUtils cannot be resolved
:(Utils.getUniqueImageFilename()
это мой собственный метод генерации уникального имени файла. Есть много способов сделать это. Одним из самых простых является использование чего-то вроде"img_"+ System.currentTimeMillis() + ".jpg"
. Другой естьFile.createTempFile()
.if (data == null || data.getData() == null)
.Я нашел это . С помощью:
для одного из намерений показывает пользователю возможность выбора «документы» в Android 4, что я нашел очень запутанным. Использование этого вместо этого показывает опцию «галерея»:
источник
У меня также была эта проблема, и я создал AlertDialog и использовал метод setItems () вместе со слушателем DialogInterface:
источник
Я объединил некоторые решения, чтобы сделать полное использование для выбора изображения из галереи или камеры. Это функции утилиты ImagePicker (также из библиотеки Github ):
Скриншот:
Изменить : Вот фрагмент кода, чтобы объединить намерение для приложений Галерея и Камера вместе. Вы можете увидеть полный код в утилите ImagePicker (также в Github lib ):
источник
getRotationFromCamera
(ImagePicker.java
) и какое значение он возвращает? В каком телефоне вы тестируете?boolean isCamera = (imageReturnedIntent == null || imageReturnedIntent.getData() == null);
этот код поможет вам в том, что есть две кнопки одна для камеры и другая для галереи, и изображение будет отображаться в ImageView
https://github.com/siddhpuraamitr/Choose-Image-From-Gallery-Or-Camera
источник
Для тех, кто получает ошибку на 4.4 и выше при попытке использовать выбор изображения, можете использовать код ниже.
Вместо того, чтобы создавать диалог со списком параметров Intent, гораздо лучше использовать Intent.createChooser, чтобы получить доступ к графическим значкам и коротким именам различных приложений «Камера», «Галерея» и даже сторонних приложений для файловой системы браузера. такие как «Астро» и др.
Здесь описывается, как использовать стандартную цель выбора и добавить к ней дополнительные намерения.
источник
Это должно позаботиться о нулевой проблеме outputFileUri:
Примечание: я использую этот код внутри android.support.v4.app.Fragment ваши переопределенные методы могут измениться в зависимости от того, какую версию Fragment / Activity вы используете.
источник
Вы можете создать диалог настроек
Открытая камера:
Открытая галерея:
Чтобы получить результат выбора
Способ сохранить захваченное изображение
источник
Решена слишком большая проблема с изображением и ее нехватка в памяти.
источник
Добавление моего решения - оно возвратит обратный вызов, будь то с камеры или с камбуза вместе с намерением:
источник
Вы можете попробовать это:
источник
Это просто, используя AlertDialog и Intent.ACTION_PICK
источник
Опираясь на ответ Дэвида, мои две копейки со
onActivityResult()
стороны. Он заботится об изменениях, введенных в 5.1.1, и определяет, выбрал ли пользователь одно или несколько изображений из библиотеки.источник
Попробуй так
Затем создайте метод onactivityresult и сделайте что-то подобное
Смотрите это http://www.theappguruz.com/blog/android-take-photo-camera-gallery-code-sample
источник
Я много работал над Camera или Gallery Image Selection и создал некоторый класс util для этой работы. С помощью этого класса «Выбор камеры или галереи слишком просто» потребовалось 5-10 минут вашего развития.
ImagePickerUtils: - http://www.codesend.com/view/f8f7c637716bf1c693d1490635ed49b3/
BitmapUtils: - http://www.codesend.com/view/81c1c2a3f39f1f7e627f01f67be282cf/
ConvertUriToFilePath: - http://www.codesend.com/view/f4668a29860235dd1b66eb419c5a58b5/
MediaUtils: - https://codeshare.io/5vKEMl
Нам нужно добавить эти разрешения в menifest:
Эта функция класса (checkAndRequestPermissions) автоматически проверяет разрешение в Android-Marshmallow и Android - Nougat.
Я надеюсь, что это поможет вам, если у кого-либо есть какие-либо предложения по улучшению этих классов, пожалуйста, добавьте свой отзыв в комментариях.
источник
Согласно ответу Дэвида Мэнпирла,
https://stackoverflow.com/a/12347567/7226732
нам просто нужно изменить onActivityResult () как
и установите захват или выберите изображения в представлении изображения.
источник