Android未检测到设备何时轮换

时间:2017-09-01 16:06:30

标签: java android rotation

我正在尝试在Android设备旋转时启动一项新活动,但我甚至没有在模拟器中检测到旋转。

我已经阅读了Android: listen for Orientation change?处的帖子,而这一切似乎都很有道理,但它只是不起作用。

在我的清单中我有:

    <activity
        android:name=".MainActivity"
        android:configChanges="orientation|screenSize"
        android:screenOrientation="portrait"
        android:windowSoftInputMode="stateHidden">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

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

在我的mainActivity.java我有:

@Override
public void onConfigurationChanged (Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    int orientation=newConfig.orientation;

    switch(orientation) {

        case Configuration.ORIENTATION_LANDSCAPE:

            showMessage("landscape");
            break;

        case Configuration.ORIENTATION_PORTRAIT:

            showMessage("portrait");
            break;

    }
}

这显然不会启动新的Activity,但我试图让方向检测首先工作(showMessage只是调用Toast并在我的代码中的其他地方工作,所以这不是我没有看到的原因任何东西)。

当我在模拟器中运行并使用旋转按钮时,模拟器按预期旋转但我从未看过Toast ......

我哪里错了? (我根据配置常量的要求导入android.content.res.Configuration

2 个答案:

答案 0 :(得分:1)

旋转设备时不会调用

onConfigurationChanged方法,实际上,由于这一行,不会调用任何内容:

android:screenOrientation="portrait"

设备只是以纵向模式锁定,删除此行,并且应调用onConfigurationChanged方法。

如果您想检测设备是否已旋转并保持android:screenOrientation="portrait"线,则可以使用加速计传感器。

答案 1 :(得分:0)

删除此行后尝试

android:configChanges="orientation|screenSize"
        android:screenOrientation="portrait"

因为你在清单中锁定屏幕方向而你是 还会覆盖活动中的配置更改。