为什么此代码不显示 Android 设备方向更改?

Why won't this code show Android device orientation changes?

昨晚,当我旋转 Android 设备时,此代码 (which I found here) 显示了各种 Log 输出,值从 0 到 360,可能还有一些负值。

但是今天不行了。没有 Log 输出。我在 Log 语句上设置了一个断点;调试时不停

我今天早上改了几行,根据orientation的值设置一个值,然后问题(没有输出)浮出水面,所以我用Show history恢复到版本MainActivity.java 昨晚最后一次激活。但是调试时没有输出,也没有停止在 Log 语句。

这是怎么解释的?

import android.app.Activity;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.util.Log;
import android.view.OrientationEventListener;

public class MainActivity extends Activity
{
    OrientationEventListener myOrientationEventListener ;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        myOrientationEventListener = new OrientationEventListener(this,
                SensorManager.SENSOR_DELAY_NORMAL)
        {
            @Override
            public void onOrientationChanged(int orientation) 
            {
                Log.w("Orient", orientation + "");
                myOrientationEventListener.enable();
            }
        };
    }
}

** 编辑 **

根据要求,这里是 AndroidManifest.xml,根据 Show history,自 2/19 以来没有变化,但我很乐意添加许可;但是昨晚它是怎么工作的呢? [另外:按照第一个答案中的建议添加了在 <activity 内突出的行。]

        <?xml version="1.0" encoding="utf-8"?>
        <manifest xmlns:android="http://schemas.android.com/apk/res/android"
                package="com.dslomer64.nowweregettinsomewheres.fragments"
                android:versionCode="1"
                android:versionName="1.0" >

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

                <application
                        android:allowBackup="true"
                        android:icon="@drawable/ic_launcher"
                        android:label="@string/app_name"
                        android:theme="@style/AppTheme" >
                        <activity
                                   android:name="com.dslomer64.nowweregettinsomewheres.fragments.MainActivity"

android:configChanges="orientation|keyboardHidden"

                                android:label="@string/app_name" >
                                <intent-filter>
                                        <action android:name="android.intent.action.MAIN" />

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

        </manifest>

这是 Android Studio 1.5.1 输出:

            02-24 12:55:12.554 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection

            02-24 12:55:12.632 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

            02-24 12:55:12.632 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getExtractedText on inactive InputConnection

            02-24 12:55:12.670 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection

            02-24 12:55:12.672 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection

            02-24 12:55:12.673 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getSelectedText on inactive InputConnection

            02-24 12:55:12.674 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection

            02-24 12:55:12.674 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection

            02-24 12:55:13.031 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection

            02-24 12:55:13.032 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection

            02-24 13:00:07.936 14836-14836/com.bffmedia.hour8app.intro W/InputMethodManager: startInputInner : InputBindResult == null

            02-24 13:00:07.946 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

            02-24 13:04:06.824 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: showStatusIcon on inactive InputConnection

            02-24 13:04:06.973 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getExtractedText on inactive InputConnection

            02-24 13:04:07.022 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection

            02-24 13:04:07.022 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection

            02-24 13:04:07.023 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: getSelectedText on inactive InputConnection

            02-24 13:04:07.025 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection

            02-24 13:04:07.025 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection

            02-24 13:04:07.402 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection

            02-24 13:04:07.402 14836-14836/com.bffmedia.hour8app.intro W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
<activity android:name=".MyActivity"
      android:configChanges="orientation|keyboardHidden"
      android:label="@string/app_name">

您的清单中需要 configChanges="orientation"。

显然,Show history 不一定包括对代码的最后更改。显然,在昨晚赶赴约会之前,我已将 .enable() 语句移到 on 块之外。代码现在可以完美运行,就像昨晚没有更改 AndroidManifest.xml.

一样
        myOrientationEventListener = new OrientationEventListener(this,
                SensorManager.SENSOR_DELAY_NORMAL)
        {
            @Override
            public void onOrientationChanged(int orientation) 
            {
                ///////// NOT HERE myOrientationEventListener.enable(); //////////
                Log.w("Orient", orientation + "");
            }
        };
        Log.w("Listener", " can detect orientation: " + myOrientationEventListener.canDetectOrientation() + " " );

        myOrientationEventListener.enable(); // HERE ////////////////////////

我要求编辑代码来源的答案,以免下一个使用它的人。只要 enable 符合逻辑,该答案就可以。

* 然而(编辑)*

在我的 onCreate 方法中,那个监听器无论如何都不能正常工作。正如@Gavriel 所建议的,我找到了一个更好的方法:

if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) ... do whatever