【问题标题】:Adobe AIR Android launching in landscape doesn't workAdobe AIR Android 横向启动不起作用
【发布时间】:2013-10-06 08:01:41
【问题描述】:

我正在开发的应用应该只在横向模式下显示。

在我的应用描述符中

    <aspectRatio>landscape</aspectRatio>
    <autoOrients>false</autoOrients> 

在 iOS 设备上,应用以横向模式启动,一切正常。

但是当我尝试在我的安卓设备(三星 Galaxy S3)上进行部署时,该应用程序以纵向模式启动。

当我修改要读取的描述符文件时:

    <aspectRatio>landscape</aspectRatio>
    <autoOrients>true</autoOrients> 

然后应用程序将改变方向。

调试时发现应用启动时的方向是stage.orientation == "default"

我还在我的 app.xml(应用描述符文件)中将 android:screenOrientation="landscape" 添加到 android 特定配置中:

<android>
    <manifestAdditions>
        <![CDATA[
        <manifest android:installLocation="auto">
            <uses-permission android:name="android.permission.INTERNET"/>
            <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
            <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
            <uses-permission android:name="android.permission.VIBRATE"/>
            <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
            <uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
            <uses-permission android:name="android.permission.WAKE_LOCK"/>
            <uses-permission android:name="android.permission.CAMERA"/>
            <uses-permission android:name="android.permission.RECORD_AUDIO"/>
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
            <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

            <uses-feature android:required="true" android:name="android.hardware.touchscreen.multitouch"/>
            <application android:enabled="true">
                <activity android:excludeFromRecents="false" android:screenOrientation="landscape">
                    <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    </intent-filter>
                </activity>
            </application>
        </manifest>
        ]]>
        </manifestAdditions>

     <!--Color depth for the app (either "32bit" or "16bit"). Optional. Default 16bit before namespace 3.0, 32bit after -->
    <!--<colorDepth></colorDepth>-->
</android>

这是一个已知问题吗?这可能是什么原因?

编辑:

我最终在主课中使用了stage.setAspectRatio( StageAspectRatio.LANDSCAPE );。它甚至适用于具有除 PORTRAIT 以外的默认方向的设备

【问题讨论】:

    标签: android flash air adobe


    【解决方案1】:

    我在定位方面也遇到了类似的问题。由于我只需要限制某些设备的方向更改,因此我通过在运行时设置值来解决它(在应用程序完全初始化之前)。

    在主应用标签中,监听预初始化事件:

    <s:Application ...
        preinitialize="preinit()">
    

    并在监听器中设置方向值:

    private function preinit():void
    {
        systemManager.stage.setOrientation(StageOrientation.ROTATED_LEFT);
        systemManager.stage.autoOrients = false;
    }
    

    或者尝试 StageOrientation.ROTATED_RIGHT。

    编辑:正如 Josh 评论的那样,这仅适用于默认为纵向的设备(即:您的三星 S3)。

    【讨论】:

    • 您不能依赖StageOrientation 常量来确定它是否是横向的。它们依赖于默认方向,这可能并不总是您期望的那样(一些更宽的平板电脑默认使用横向,而大多数使用纵向)。您需要旋转并验证stage.stageWidth 大于(横向)/小于(纵向)stage.stageHeight,以确保您处于正确的方向。
    • 同意,但手机默认始终为纵向,因此旋转方向始终为横向。我已经编辑了我的答案以澄清。
    • 你是对的,你通常可以假设,但你不应该依赖它,因为它会从你的手中夺走一些控制权,并将其交给制造商或更糟的 Adob​​e。尽管设备本身是正确的,但 AIR 本身在过去会报告错误的默认方向(第一款视网膜 iPad 肯定有这个问题,我认为第一款视网膜 iPhone 可能也有)
    • 感谢您的回答。我最终使用了stage.setAspectRatio( StageAspectRatio.LANDSCAPE );,我认为这是最正确的方法,并且还可以使用除 PORTRAIT 以外的默认值的设备
    猜你喜欢
    • 1970-01-01
    • 2014-02-22
    • 1970-01-01
    • 1970-01-01
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多