phoneGap原生应用中的Android手机轮换问题

时间:2012-01-19 19:28:57

标签: android cordova screen-rotation

我是Java android开发的新手。所以我的应用程序存在问题。

我用phoneGap opensource和Jquery移动框架构建了一个Android应用程序。 这通常很好看。

但问题是......当我在运行应用程序后尝试旋转手机时,意外的应用程序正在关闭。

这不只是我的手机在每部Android手机上发生的事情。

我真的想删除应用中的屏幕旋转。

希望你理解

请帮帮我....

7 个答案:

答案 0 :(得分:10)

我可能遇到了同样的问题 - 旋转崩溃。我不认为我从教程中复制了AndroidManifest.xml。我没有添加

 android:configChanges="orientation|keyboardHidden" 

到第1次活动。看到我之前和之后:

之后(工作):

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".App"
        android:label="@string/app_name"  android:configChanges="orientation|keyboardHidden">
        <intent-filter>

之前(旋转时崩溃):

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".App"
        android:label="@string/app_name">
        <intent-filter>

不确定您是否确实要修复屏幕或停止崩溃,但如果您想修复纵向或横向,则可以执行以下操作:

    <application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".App"
        android:label="@string/app_name"  android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="landscape" >
        <intent-filter>

答案 1 :(得分:4)

您必须在主页中使用以下js。

$(document).ready(function() {
    var canDetect = "onorientationchange" in window;
    var orientationTimer = 0;

    var ROTATION_CLASSES = {
        "0": "none",
        "90": "right",
        "-90": "left",
        "180": "flipped"
    };

    $(window).bind(canDetect ? "orientationchange" : "resize", function(evt) {
        clearTimeout(orientationTimer);
        orientationTimer = setTimeout(function() {
            // display the event type and window details
            $("#event-type").html(evt.type);
            $("#window-orientation").html(window.orientation);
            $("#window-width").html(window.innerWidth);
            $("#window-height").html(window.innerHeight);

            // given we can only really rely on width and height at this stage, 
            // calculate the orientation based on aspect ratio
            var aspectRatio = 1;
            if (window.innerHeight !== 0) {
                aspectRatio = window.innerWidth / window.innerHeight;
            } // if

            // determine the orientation based on aspect ratio
            var orientation = aspectRatio <= 1 ? "portrait" : "landscape";

            // if the event type is an orientation change event, we can rely on
            // the orientation angle
            var rotationText = null;
            if (evt.type == "orientationchange") {
                rotationText = ROTATION_CLASSES[window.orientation.toString()];
            } // if

            $(window).trigger("reorient", [orientation, rotationText]);
        }, 500);
    });

    $(window).bind("reorient", function(evt, orientation, rotation) {
        // display the details we have determine from the display
        $("#orientation").html(orientation);
        $("#rotation-class").html(rotation);
    });
});

这对我有用,没有在manifest.xml中做任何事情

答案 2 :(得分:3)

我遇到了同样的问题。我正在使用android:minSdkVersion="8"android:targetSdkVersion="16"开发PhoneGap应用程序。当我尝试将screenSize添加到android:configChanges时,它表示screenSize不存在。然后我减少了targetSdkVersion,一切都开始完美。这是我的清单文件

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:windowSoftInputMode="adjustPan"
  package="com.planetclub.mobile" android:versionName="1.1" android:versionCode="6">
<supports-screens
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:resizeable="true"
    android:anyDensity="true"
    />
<uses-permission android:name="android.permission.INTERNET" />   
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<application android:icon="@drawable/planet" android:label="@string/app_name" >
    <activity android:name=".Main" 
        android:label="@string/app_name" 
        android:configChanges="orientation|keyboardHidden|locale" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>

答案 3 :(得分:1)

我认为您的问题与任何特定框架无关;很可能你引用了一些无效的实例。请记住,方向更改会导致系统完成保存实例状态,暂停,停止,销毁,然后使用已保存状态创建活动的新实例的过程。因此,如果你 - 例如,保存对某个实例的引用,那么在方向更改后,引用不再有效(可能为null)。

您应该尝试修复它,请检查reference。但是,如果您确实不想允许更改屏幕方向,请将以下属性添加到清单文件中的主要活动:

android:screenOrientation="portrait/landscape"
android:configChanges="keyboardHidden|orientation|screenSize">

答案 4 :(得分:1)

如果您正在为Android API 13或更高版本开发,则需要将screenSize添加到android:configChanges以防止崩溃。像这样:

android:configChanges="orientation|screenSize|keyboardHidden"

在此处找到:

https://groups.google.com/forum/?fromgroups#!msg/phonegap/HYUfLJF1oH0/r9rZTfz_cccJ

答案 5 :(得分:1)

我遇到了同样的问题。当我从肖像移动到风景或从风景到肖像时,应用程序就死了。没理由。

我检查了android:configChanges="orientation|keyboardHidden"并添加了屏幕尺寸,但没有变化 我做了很多改变。我终于取消了这条线并重写了它并且它起作用了。
我认为该行存在Eclipse编辑器看不到的问题而且不可见。原始行是来自phonegap安装的复制/粘贴。

答案 6 :(得分:0)

我遇到了同样的问题。但我的android:configChanges设置正确。最后我发现我需要将miniSdkVersion从15改为7.