Кордова 3.1 Ориентация не работает

У меня есть приложение (Cordova 3.1), которое должно отображаться только в портретной ориентации.

Мой config.xml:

<?xml version='1.0' encoding='utf-8'?>
<widget id="de.something.test" version="0.0.6" xmlns="http://www.w3.org/ns/widgets"
    xmlns:cdv="http://cordova.apache.org/ns/1.0">
<name>Something 2.0</name>
<description>
    A sample Apache Cordova application that responds to the deviceready event.
</description>
<author email="[email protected]" href="http://cordova.io">
    Apache Cordova Team
</author>
<content src="index.html"/>
<access origin="*"/>
<preference name="fullscreen" value="false"/>
<preference name="webviewbounce" value="true"/>
<preference name="splashscreen" value="splash"/>
<preference name="splashScreenDelay" value="2000"/>
<preference name="DisallowOverscroll" value="true"/>
<preference name="target-device" value="handset"/>
<preference name="detect-data-types" value="false"/>
<preference name="ios-statusbarstyle" value="black-opaque" />
<preference name="Orientation" value="portrait" />
</widget>

Сгенерированный AndroidManifest.xml после запуска «cordova build android» в папке:

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.6" android:windowSoftInputMode="adjustPan" package="de.pfeffermind.spyday" xmlns:android="http://schemas.android.com/apk/res/android">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<application android:debuggable="true" android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="Something20" android:theme="@android:style/Theme.Black.NoTitleBar">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode" android:hardwareAccelerated="false" android:name="com.flurry.android.FlurryFullscreenTakeoverActivity" />
</application>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="17" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>

Так что нет

<activity android:name=".SomeActivity" android:label="@string/app_name" android:screenOrientation="portrait">

для отключения ландшафтного режима.

Кто-нибудь может здесь помочь?

Спасибо!

Себастьян


person Sebastian    schedule 29.11.2013    source источник


Ответы (3)


Ориентация блокировки Cordova через config.xml нарушена из-за несоответствия платформы, я думаю: https://issues.apache.org/jira/browse/CB-5634. Я установил плагин, чтобы обойти это, затем в вашем основном модуле заблокируйте ориентацию.

    document.addEventListener('deviceready', function(){
        window.plugins.orientationLock.lock("landscape");   
    });
person sgimeno    schedule 16.01.2014
comment
Да, я тоже использовал это, но плагин доступен только для Android... :-/ должна быть какая-то более удобная возможность сделать это! - person Sebastian; 16.01.2014

См. конфигурацию манифеста.

activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/app_name" android:name="Something20" android:theme="@android:style/Theme.Black.NoTitleBar"
//Add in Manifest
android:screenOrientation="portrait">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Вы не можете понять, что такое config.xml в папке www. Он используется только тогда, когда вы используете Phonegap Build для создания приложения. В случае, если не работает в эмуляторе Android.

person Hanh Le    schedule 30.11.2013
comment
То есть вы имеете в виду, что это не сработает, если я соберу свое приложение с набором команд Cordova cli по умолчанию? Мне действительно нужно редактировать AndroidManifest для этого? - person Sebastian; 30.11.2013
comment
Вы можете установить screenOrientation в пользовательском файле plugin.xml, он должен быть распространен на AndroidManifest.xml. - person sgimeno; 09.10.2014

Похоже, что это поведение не реализуется автоматически для локальных сборок Cordova, как вы можете прочитать здесь (http://docs.phonegap.com/en/3.3.0/guide_platforms_android_config.md.html#Android%20Configuration) и в исходном коде.

person adz    schedule 12.01.2014
comment
Не изменяйте AndroidManifest.xml, если не хотите нарушить «дзен» Cordova. Плагины отлично работают для меня. - person sgimeno; 16.01.2014