为啥此代码不会显示 Android 设备方向更改?
Posted
技术标签:
【中文标题】为啥此代码不会显示 Android 设备方向更改?【英文标题】:Why won't this code show Android device orientation changes?为什么此代码不会显示 Android 设备方向更改? 【发布时间】:2016-02-24 18:10:21 【问题描述】:昨晚,当我旋转我的 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();
;
** 编辑 **
根据Show history
的要求,这里是AndroidManifest.xml
,自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 需要具有处理方向更改的权限 其实我看过另一个 SO 问题。也许如果你想尝试其中一个赞成的答案,而不是获得 0 票的答案,它会起作用:) 昨晚效果如何???我很困惑。但我会尝试其他一种。 好吧,我不知道自昨天以来会发生什么变化(您的代码?您在不同的设备上尝试过?您的清单?您的 API 级别?,...)或者只是您旋转电话(快/慢)?但是我什至不确定你是否需要这个传感器,当方向改变时每个 Activity 都会重新启动,你应该能够在 onCreate() 中检测到它 @Gavriel--我听取了您的建议,并在下面的答案中找到了更可靠的解决方案。 【参考方案1】:<activity android:name=".MyActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/app_name">
您的清单中需要 configChanges="orientation"。
【讨论】:
我补充说。仍然没有Log
输出。
permission
呢?
好吧,我不知道这个orientationchangelistener,但是对于其他问题中的其他解决方案,您不需要比我在回答中添加的更多内容。【参考方案2】:
显然,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
【讨论】:
以上是关于为啥此代码不会显示 Android 设备方向更改?的主要内容,如果未能解决你的问题,请参考以下文章
PhoneGap - 为啥 Android 虚拟设备不显示更改?