简体   繁体   中英

How to set android:screenOrientation=“portrait” for Camera

I am using Samsung Galaxy Note to run a phonegap application. When I take picture, I can see that screen rotates just before entering camera. How can I disable this?

I have tried to force portrait orientation on both, the main thread & camera activity, but those do not seem to work:

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:debuggable="true">
    <activity android:name=".App" android:windowSoftInputMode="adjustPan" android:screenOrientation="portrait"
              android:label="@string/app_name" android:configChanges="orientation|keyboardHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.phonegap.DroidGap" android:label="@string/app_name" 
              android:configChanges="orientation|keyboardHidden">
        <intent-filter>
        </intent-filter>
    </activity>
    <activity android:name="com.android.camera.Camera"
            android:screenOrientation="portrait">
    </activity>
</application>

You need to add the permission on the manifest:

<uses-feature android:name="android.hardware.screen.portrait" />

Doc android of balise uses-feature

For example, if your app requires portrait orientation, you should declare <uses-feature android:name="android.hardware.screen.portrait"/> so that only devices that support portrait orientation (whether always or by user choice) can install your app. If your application supports both orientations, then you don't need to declare either.

How do you take picture? If you are sending intent to fire up camera application you lose control about orientation changes. Also note, that before going to sleep and locking screen launcher forces your application into portrait with an butt-kick regardles of the settings or overriding methods. Most probably you can not and behaviour on other devices could be different.

There are 2 things here that should be taken into account. First, this

android:screenOrientation="landscape"

has no effect if in the java code there is something like this:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Then, there is this other method that could be bothering you:

mCamera.setDisplayOrientation(90);

This would rotate your camera preview.

Hope this helps!

使用android:configChanges="orientation|keyboardHidden"将屏幕设置为纵向。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM