1

Как видно из названия, у меня есть возможность загрузить изображение в мое приложение. Хотелось бы иметь два варианта: Нажмите на новое изображение & Выберите из галереи. выбор Галерея работает отлично на всех устройствах, использующих этот код:Правильное решение для выбора/клика по изображению на 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 не соблюдается всеми приложениями камеры.

Также, если память низкая, мое приложение убито системой, что усложняет ситуацию.

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

ответ

2

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

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

Также, если память низкая, мое приложение убито системой, что усложняет ситуацию.

Вам все равно придется обращаться. Сохраните введенное значение EXTRA_OUTPUT в состоянии сохраненного экземпляра Bundle.

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

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

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

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

  • Если ни истинны, и getParcelableExtra("data") возвращает значение, кроме того, что Bitmap в файл

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

или сделайте снимок себя, непосредственно или с использованием библиотеки как mine.

 Смежные вопросы

  • Нет связанных вопросов^_^