Intereting Posts
Включить монитор из приложения Google TV Почему нам нужно больше одного манифеста для проекта Android? Может ли низкая память вызывать ошибки seg в собственном коде? Как начать работу с UncaughtExceptionHandler, если это основной поток разбился? Правильный способ расчета наилучшего формата предварительного просмотра изображения камеры Пакеты модулей, не найденные во время компиляции в IntelliJ Запретить другим приложениям доступ к изображению моего приложения, хранящемуся на SD-карте Кнопка Android Radio: удаление левой прокладки Как показать combobox в Android? Как сделать AsyncTask модульным в android Как поддерживать дополнительные большие экраны в Android? Вопрос с «@id» и «@ + id» в позиционировании в Relative Layout Как сохранить данные из edittext в базу данных android sqlite? Иконка Launcher отсутствует в Android Разбор с джексоном и вставка одного объекта в sqlite с помощью ormlite android

Изображение из камеры или галереи?

У меня есть намеренный выбор, который позволяет мне выбирать изображение из галереи или камеры следующим образом:

Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT,null); galleryIntent.setType("image/*"); galleryIntent.addCategory(Intent.CATEGORY_OPENABLE); Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); Intent chooser = new Intent(Intent.ACTION_CHOOSER); chooser.putExtra(Intent.EXTRA_INTENT, galleryIntent); chooser.putExtra(Intent.EXTRA_TITLE, "title"); Intent[] intentArray = {cameraIntent}; chooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray); startActivityForResult(chooser,REQUEST_CODE); 

Я хочу, чтобы мой метод onActivityResult был следующим:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(Condition == picture_coming_from_gallery) { //my code here } else if(condition == picture_coming_from_camera) { //another code here } } 

Какое условие позволяет мне узнать, откуда исходит мой образ?

Обновлено:

Теперь он работает, и вот решение:

  protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK) { if(data.getData()!=null) { try { if (bitmap != null) { bitmap.recycle(); } InputStream stream = getContentResolver().openInputStream(data.getData()); bitmap = BitmapFactory.decodeStream(stream); stream.close(); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else { bitmap=(Bitmap) data.getExtras().get("data"); imageView.setImageBitmap(bitmap); } super.onActivityResult(requestCode, resultCode, data); } } 

Спасибо за помощь!

Solutions Collecting From Web of "Изображение из камеры или галереи?"

Хотя текущий фрагмент кода – это аккуратный способ представления вариантов на выбор, я обнаружил, что его трудно справиться. По крайней мере, в моем случае это было так. Мне нужно сохранить изображения, снятые с камеры, для дальнейшей обработки в SDK Aviary ( если пользователь так выбирает ).

С этой целью я хотел бы предложить обходное решение.

Это не касается вашего вопроса как такового. Но предлагает альтернативу, учитывая, что вам нужно знать, откуда приходит изображение (Камера / Галерея) .

 AlertDialog.Builder builder = new AlertDialog.Builder(StatusUpdate.this); builder.setTitle("Choose Image Source"); builder.setItems(new CharSequence[] {"Gallery", "Camera"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: // GET IMAGE FROM THE GALLERY Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("image/*"); Intent chooser = Intent.createChooser(intent, "Choose a Picture"); startActivityForResult(chooser, ACTION_REQUEST_GALLERY); break; case 1: Intent getCameraImage = new Intent("android.media.action.IMAGE_CAPTURE"); File cameraFolder; if (android.os.Environment.getExternalStorageState().equals (android.os.Environment.MEDIA_MOUNTED)) cameraFolder = new File(android.os.Environment.getExternalStorageDirectory(), "some_directory_to_save_images/"); else cameraFolder= StatusUpdate.this.getCacheDir(); if(!cameraFolder.exists()) cameraFolder.mkdirs(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd'T'HHmmss"); String timeStamp = dateFormat.format(new Date()); String imageFileName = "picture_" + timeStamp + ".jpg"; File photo = new File(Environment.getExternalStorageDirectory(), "some_directory_to_save_images/" + imageFileName); getCameraImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); initialURI = Uri.fromFile(photo); startActivityForResult(getCameraImage, ACTION_REQUEST_CAMERA); break; default: break; } } }); builder.show(); 

Это результат ( я все еще утверждаю, что код дает намного лучший набор выбора, но опять же, не самое простое в вашем случае использования или в моем ):

Введите описание изображения здесь

Теперь вы можете обработать результат на основе источника выделения:

 protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode == RESULT_OK) { switch (requestCode) { case ACTION_REQUEST_GALLERY: break; case ACTION_REQUEST_CAMERA: break; } } }; 

ОБНОВЛЕНО:

Найди его! Здесь есть ответ на SO, который адресован именно вам. Это все-таки «обходное решение» *. В том смысле, что он не полагается на разные requestCodes . Но работает тем не менее.

Странно, я пропустил это, когда я застрял в этом. 🙁

ПРИМЕЧАНИЕ. Я не размещаю код здесь и вместо этого ссылаюсь на него. Все реквизиты идут к оригинальному автору. 🙂

Вы можете различать, используя REQUEST_CODE

  private static final int PICK_FROM_CAMERA = 1; private static final int PICK_FROM_GALLARY = 2; /* For Image capture from camera */ Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(intent, PICK_FROM_CAMERA); /* For Image capture from Gallary*/ startActivityForResult(new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI), PICK_FROM_GALLARY); } public void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); switch (requestCode) { case PICK_FROM_CAMERA: if (resultCode == Activity.RESULT_OK) { Bitmap bitmapImage = (Bitmap) intent.getExtras().get("data"); } break; case PICK_FROM_GALLARY: if (resultCode == Activity.RESULT_OK) { Uri mImageCaptureUri = intent.getData(); } break; } }