I'm trying to take a photo and set bitmap to an imageview. But the resulting bitmap is rotated differently in different devices.
One is samsung j5 prime (180 degrees) One is LG G3 (normal as i wrote the code according to this device) Both have android 6.0 (actually the samsuung has 6.0.1 but i don't think it makes any difference)
This is my code:
private int findImageRotation(Uri uri) throws IOException {
    ExifInterface ei = new ExifInterface(uri.getPath());
    int orientation = ei.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
    int degree = 0;
    switch (orientation) {
        case ExifInterface.ORIENTATION_ROTATE_270:
            degree = 270;
            break;
        case ExifInterface.ORIENTATION_ROTATE_180:
            degree = 180;
            break;
        case ExifInterface.ORIENTATION_ROTATE_90:
            degree = 90;
            break;
        case ExifInterface.ORIENTATION_NORMAL:
        default:
            break;
    }
    return degree;
}
private Bitmap rotateImage(Bitmap source, float angle) {
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}
private void imageToBase64(final Uri uri, final Base64ConvertListener listener) {
    new Handler().post(new Runnable() {
        @Override
        public void run() {
            Bitmap bitmap;
            try {
                int degree = findImageRotation(uri);
                bitmap = BitmapFactory.decodeStream(getContext().getContentResolver().openInputStream(uri));
                bitmap = rotateImage(bitmap, degree - 90);
                if (bitmap != null) {
                    String extension = getMimeType(getContext(), uri);
                    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
                    if (extension.toLowerCase().contains("png"))
                        bitmap.compress(Bitmap.CompressFormat.PNG, 50, byteArrayOutputStream);
                    else if (extension.toLowerCase().contains("jpg") || extension.toLowerCase().contains("jpeg"))
                        bitmap.compress(Bitmap.CompressFormat.JPEG, 50, byteArrayOutputStream);
                    ivHostImage.setImageBitmap(bitmap);
                    byte[] byteArray = byteArrayOutputStream.toByteArray();
                    listener.onConvertedToBase64("data:" + extension + ";base64," + Base64.encodeToString(byteArray, Base64.DEFAULT));
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
}
 
    