安卓屏幕旋转检测

3

我有一个应用程序,它强制屏幕旋转为横向(通过ADB控制设备的外部应用程序)。

我在我的设备上运行另一个应用程序,该应用程序必须检测当前方向(纵向/横向,反转或不反转并不重要),并在设备屏幕方向更改时执行某些操作。我已经编写了一个OrientationEventListener,它工作得很好:

m_orientationEventListener = new OrientationEventListener(this) {
    @Override
    public void onOrientationChanged(int orientation) {
        doSomething()
    }
};
m_orientationEventListener.enable();

我的问题: 当屏幕关闭然后重新打开时,原始ROM会将屏幕旋转到纵向,直到屏幕解锁。**我既没有在屏幕旋转到纵向时收到事件,也没有在解锁后旋转回横向时收到事件**。 有什么方法可以监听这个事件吗?
注意:我没有任何活动在屏幕上:我正在后台运行,并且希望从后台检测它。
谢谢您的帮助。

1
使用SensorEventListener。 - user1682446
1个回答

4

感谢+Satnam Singh。

这是我使用的示例代码:

m_sensorEventListener = new SensorEventListener() {
    @Override
    public void onSensorChanged(SensorEvent event) {
        if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
            Log.i(TAG,"Orientation : PORTRAIT");
        }
        else {
            Log.i(TAG,"Orientation : LANDSCAPE");
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {}
};

SensorManager sm = (SensorManager)getSystemService(SENSOR_SERVICE);
sm.registerListener(m_sensorEventListener, sm.getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR), SensorManager.SENSOR_DELAY_NORMAL);

我已经添加了一个屏幕状态(开/关)BroadcastReceiver,当屏幕关闭时关闭我的监听器并避免不必要的能量消耗。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接