Android получить полноразмерное изображение с камеры

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

// From onCreate Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

У меня есть метод обработки результата Activity. Это оба обрабатывают выбор из галереи и из камеры:

 public void onActivityResult(int requestCode, int resultCode, Intent data) { String filepath = ""; Uri selectedImageUri; if (resultCode == RESULT_OK) { if (requestCode == CAMERA_PIC_REQUEST) { Bitmap photo = (Bitmap) data.getExtras().get("data"); // Gets real path of image so it can be uploaded selectedImageUri = getImageUri(getApplicationContext(), photo); } else { selectedImageUri = data.getData(); } // Handle the upload ... } } public Uri getImageUri(Context inContext, Bitmap inImage) { String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null); return Uri.parse(path); } 

Однако это работает, изображение малое и не соответствует соглашению об именах для сохраненных изображений. Я прочитал, что для сохранения полного размера мне нужно использовать putExtra и передать MediaStore.EXTRA_OUTPUT на CameraIntent и объявить временный файл, поэтому я адаптировал свой код намерения следующим образом:

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss"); camImgFilename = sdf.format(new Date())+".jpg"; File photo = new File Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), camImgFilename); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

Однако это приводит к ошибке, указывающей, что «Источник не найден».

Не знаете, куда двигаться дальше?

ОБНОВИТЬ

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

    Я думаю, проблема в том, что вы все еще пытаетесь получить доступ к миниатюре от Intent . Чтобы получить полноразмерное изображение, вам нужно получить доступ к файлу напрямую. Поэтому я бы рекомендовал сохранить имя файла перед запуском действия камеры, а затем загрузить файл в onActivityResult .

    Я предлагаю прочитать « Съемка фотографий» Просто из официальной документации, где вы найдете эту цитату в отношении эскиза:

    Примечание. Это уменьшенное изображение из «данных» может быть полезно для значка, но не намного больше. Работа с полноразмерным изображением требует немного больше работы.

    Также в последнем разделе вы найдете код, который вам нужен:

     private void setPic() { // Get the dimensions of the View int targetW = mImageView.getWidth(); int targetH = mImageView.getHeight(); // Get the dimensions of the bitmap BitmapFactory.Options bmOptions = new BitmapFactory.Options(); bmOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); int photoW = bmOptions.outWidth; int photoH = bmOptions.outHeight; // Determine how much to scale down the image int scaleFactor = Math.min(photoW/targetW, photoH/targetH); // Decode the image file into a Bitmap sized to fill the View bmOptions.inJustDecodeBounds = false; bmOptions.inSampleSize = scaleFactor; bmOptions.inPurgeable = true; Bitmap bitmap = BitmapFactory.decodeFile(mCurrentPhotoPath, bmOptions); mImageView.setImageBitmap(bitmap); }