Правильное решение, чтобы выбрать/щелкнуть изображение на Android

Как следует из названия, у меня есть возможность загрузить изображение в свое приложение. Я хотел бы иметь два варианта: щелкните новое изображение и выберите из галереи. Выбор галереи работает нормально на всех устройствах, использующих этот код:

Intent in = new Intent();
in.setType("image/*");
in.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(in, getString(R.string.selectpicture)), 100);

Проблема с Click a new picture.

Я хочу использовать другие приложения камеры, установленные на устройстве, для получения изображения. Этот код должен сохранять изображение, которое пользователь нажимает по указанному пути.

Intent m_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
imageUri = getImageUri();
m_intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(m_intent, REQUEST_IMAGE_CAPTURE);

Но что происходит, так это то, что EXTRA_OUTPUT не соблюдается всеми приложениями камеры.

Кроме того, если памяти мало, мое приложение убивает система, что усложняет ситуацию.

Итак, как лучше всего дать пользователю возможность щелкнуть новое изображение и получить путь к изображению в моем приложении? Если использование сторонних библиотек лучше, какие из них надежны?


person Prasad Pawar    schedule 30.01.2017    source источник


Ответы (1)


EXTRA_OUTPUT не соблюдается всеми приложениями камеры.

Каждый раз, когда вы делегируете что-либо стороннему приложению, вы можете столкнуться с проблемами.

Кроме того, если памяти мало, мое приложение убивает система, что усложняет ситуацию.

Вы должны справиться с этим в любом случае. Сохраните значение, которое вы указали в EXTRA_OUTPUT, в сохраненном состоянии экземпляра Bundle.

каков наилучший способ позволить пользователю щелкнуть новое изображение и получить путь к изображению в моем приложении?

Если вы хотите придерживаться ACTION_IMAGE_CAPTURE, я бы выбрал следующую сортировку:

  • Если в месте, которое вы предоставили EXTRA_OUTPUT, есть изображение, используйте его

  • Если нет, и getData() в Intent, данном вам в onActivityResult(), возвращает Uri (а не null), используйте это (и если вам действительно нужен File, используйте ContentResolver и openInputStream() с Uri и скопируйте содержимое в свой собственный файл)

  • Если ни одно из них не верно, и getParcelableExtra("data") возвращает значение, сохраните это Bitmap в файл

  • Если ни одно из этих утверждений не соответствует действительности, предложите пользователю установить другое приложение для камеры, возможно, указав ему на то, которое вы пробовали и знаете, что оно работает.

Или сделайте снимок самостоятельно, напрямую или с помощью библиотеки, например моей.

person CommonsWare    schedule 30.01.2017