Блокировка ориентации камеры по отношению к портрету

Как я могу запретить камере Android переключать ориентацию в альбомную, если я запускаю камеру следующим образом:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    File imageFolder = new File (Environment.getExternalStorageDirectory(), Environment.DIRECTORY_DCIM);
    imageFile = new File (imageFolder, UUID.randomUUID().toString()+".png");
    Uri uriImage = Uri.fromFile(imageFile);
    intent.putExtra(MediaStore.EXTRA_OUTPUT, uriImage);
    startActivityForResult(intent, 0);

Так что у меня нет особой активности камеры. В файле manifest.xml все приложение установлено в портретную ориентацию, но камера переключается.

Вторая проблема: после съемки изображения и установки его в imageView он не переключается в ориентацию, даже если я взял его в портретном режиме (я сохраняю изображение перед установкой imageView), как я могу отобразить его в правильном положении?

1 ответ

Решение

Попробуйте это для блокировки ориентации камеры на портрет,

// *************************************************************************//
    // Stop the screen orientation changing during an event
    // *************************************************************************//

    @Override
    public void onConfigurationChanged(Configuration newConfig)
    {
        super.onConfigurationChanged(newConfig);
        lockScreenRotation(Configuration.ORIENTATION_PORTRAIT);
    }

    private void lockScreenRotation(int orientation)
    {
        // Stop the screen orientation changing during an event
        this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    }

    // *************************************************************************//
    // store the file url as it will be null after returning from camera app
    // *************************************************************************//

    @Override
    public void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        // save file url in bundle as it will be null on scren orientation
        // changes
        outState.putParcelable("file_uri", fileUri);
    }

    protected void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onSaveInstanceState(savedInstanceState);

        // get the file url
        fileUri = savedInstanceState.getParcelable("file_uri");
    }

Установите это на onActivityResult для получения изображения в правильном положении

if (resultCode == Activity.RESULT_OK
                && requestCode == CAMERA_CAPTURE_IMAGE_REQUEST_CODE)
        {
            filePath = fileUri.getPath();

            Utility.log("FILE PATH CAMEREA:->", filePath);
            // AppSharedPrefrence.getInstance(getActivity()).setImagePath(path);

            // *************************************************************************//
            // set default camera rotation
            // *************************************************************************//
            try
            {
                File f = new File(filePath);
                ExifInterface exif = new ExifInterface(f.getPath());
                int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);

                int angle = 0;

                if (orientation == ExifInterface.ORIENTATION_ROTATE_90)
                {
                    angle = 90;
                }
                else if (orientation == ExifInterface.ORIENTATION_ROTATE_180)
                {
                    angle = 180;
                }
                else if (orientation == ExifInterface.ORIENTATION_ROTATE_270)
                {
                    angle = 270;
                }

                Matrix mat = new Matrix();
                mat.postRotate(angle);
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inSampleSize = 2;

                Bitmap bmp1 = BitmapFactory.decodeStream(new FileInputStream(f), null, options);
                Bitmap bmp = Bitmap.createBitmap(bmp1, 0, 0, bmp1.getWidth(), bmp1.getHeight(), mat, true);
                OutputStream stream = new FileOutputStream(filePath);
                bmp.compress(Bitmap.CompressFormat.JPEG, 70, stream);

                // imageBmp =
                // Bitmap.createScaledBitmap(BitmapFactory.decodeFile(path),
                // 400, 400, true);
                imageBmp = BitmapFactory.decodeFile(filePath);
                imgProfilePic.setImageBitmap(imageBmp);

            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            catch (OutOfMemoryError oom)
            {
                oom.printStackTrace();
            }

        } 
Другие вопросы по тегам