在调用了setRequestedOrientation之后,手机屏幕的旋转不触发onConfigurationChanged方法,这个时候需要再调用一次
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);方法,让他开启自动旋转事件
如代码:
/**
* 开启监听器
*/
private final void startListener() {
mOrientationListener = new OrientationEventListener(this) {
@Override
public void onOrientationChanged(int rotation) {
if (startRotation == -2) {//初始化角度
startRotation = rotation;
}
//变化角度大于30时,开启自动旋转,并关闭监听
int r = Math.abs(startRotation - rotation);
r = r > 180 ? 360 - r : r;
if (r > 30) {
//开启自动旋转,响应屏幕旋转事件
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
this.disable();
}
}
};
}
在手动旋转按钮监听事件中写下
//设置完之后变成强制设定为横屏或纵屏,如同AndroidManifest.xml中设置了android:screenOrientation
if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
//2秒后开启屏幕旋转监听,用来开启自动旋转,响应屏幕旋转事件
orientationHandler.sendEmptyMessageDelayed(0, 2000);
最后设置handler
private OrientationEventListener mOrientationListener; // 屏幕方向改变监听器
private int startRotation;
Handler orientationHandler = new Handler(){
public void handleMessage(Message msg) {
startRotation = -2;
mOrientationListener.enable();
};
};