-->

android force camera to take photo in landscape mo

2020-02-02 00:03发布

问题:

I want to force the default android camera to take photo in landscape mode only. I have tried following:

         Intent cameraIntent=new Intent("android.media.action.IMAGE_CAPTURE");
         File photo = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "Pic.jpg");
         cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
         cameraIntent.putExtra(MediaStore.EXTRA_SCREEN_ORIENTATION, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
         startActivity(cameraIntent);

but this works only in 2.1 not for later. I just want to have photo image to be saved in landscape mode. I don't want to use any image processing such as matrix or custom camera.

Note: I am calling this intent from the activity which has the orientation fixed as "portrait"

回答1:

In androidmanifest.xml

<activity android:name="activity_name" android:screenOrientation="landscape" />

This activity will be your image capturing activity.



回答2:

Using ACTION_IMAGE_CAPTURE intent you have limited control of the app that actually drives the camera. You can expect it to comply with the Intent contract, but nothing more than that.

Standard Intent action that can be sent to have the camera application capture an image and return it.

The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object in the extra field. This is useful for applications that only need a small image. If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of EXTRA_OUTPUT. As of LOLLIPOP, this uri can also be supplied through setClipData(ClipData). If using this approach, you still must supply the uri through the EXTRA_OUTPUT field for compatibility with old applications. If you don't set a ClipData, it will be copied there for you when calling startActivity(Intent).

Note: if you app targets M and above and declares as using the CAMERA permission which is not granted, then atempting to use this action will result in a SecurityException.

You can receive the image from this intent and force rotate it to Landscape, if you are interested. Note that many camera apps today only produce Landscape photos anyway.