FileNotFoundException cuando se usa ExifInterface

He estado cargando imágenes en FirebaseStorage, pero a menudo están al revés al mostrarlas. He descubierto el ExifInterface que puede determinar la orientación de la imagen y rotarla y voltearla si es necesario.

Al seleccionar la imagen del área de la galería en mi teléfono, aparece este error.

Puedo seleccionar la imagen en mi teléfono desde la galería y se puede mostrar en la página.

Las diferencias entre la dirección URI y los datos son uno/

Data.getData() address : content://media/external/images/media/53331

uri.toString() address: content:/media/external/images/media/53331

Estoy usando la dirección uri como la ruta absoluta de la imagen para poder rotarla si es necesario. Paso este valor a otro método llamadomodifyOrientation que luego lo gira. Una vez que se pasa al método, llega a la línea.

ExifInterface ei = new ExifInterface(image_absolute_path);

y luego vuelve a la captura ya que no se encontró el archivo.

A continuación se muestra el error completo que recibo, así como todo mi código. ¿Cómo puedo solucionar este problema que estoy teniendo? Entonces, cuando paso el URI al siguiente método, en realidad tiene la dirección correcta.

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);
        final FirebaseUser user = auth.getCurrentUser();

        if (requestCode == GALLERY_INTENT && resultCode == RESULT_OK)
        {
            progressDialog = new ProgressDialog(getActivity());
            progressDialog.setMessage("Displaying Image...");
            progressDialog.show();

            //imageUri = data.getData();
            //Picasso.get().load(imageUri).into(profileImage);


            final Uri uri = data.getData();


            File file = new File(uri.toString());
            file.getAbsolutePath();

            progressDialog.dismiss();
            try
            {
                Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
                modifyOrientation(bitmap,file.getAbsolutePath());
                profileImage.setImageBitmap(bitmap);
            }
            catch(IOException e)
            {
                e.getStackTrace();
            }
        }
    }

    public static Bitmap modifyOrientation(Bitmap bitmap, String image_absolute_path) throws IOException {
        ExifInterface ei = new ExifInterface(image_absolute_path);
        int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

        switch (orientation) {
            case ExifInterface.ORIENTATION_ROTATE_90:
                return rotate(bitmap, 90);

            case ExifInterface.ORIENTATION_ROTATE_180:
                return rotate(bitmap, 180);

            case ExifInterface.ORIENTATION_ROTATE_270:
                return rotate(bitmap, 270);

            case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
                return flip(bitmap, true, false);

            case ExifInterface.ORIENTATION_FLIP_VERTICAL:
                return flip(bitmap, false, true);

            default:
                return bitmap;
        }
    }

    public static Bitmap rotate(Bitmap bitmap, float degrees) {
        Matrix matrix = new Matrix();
        matrix.postRotate(degrees);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    }

    public static Bitmap flip(Bitmap bitmap, boolean horizontal, boolean vertical) {
        Matrix matrix = new Matrix();
        matrix.preScale(horizontal ? -1 : 1, vertical ? -1 : 1);
        return Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
    }

Respuestas a la pregunta(1)

Su respuesta a la pregunta