5

我正在制作一个允许您阅读维基百科页面的应用程序。

每次手机从纵向旋转到横向时,我都想显示一个图标,反之亦然。如果他愿意,它将让用户锁定屏幕方向,否则屏幕将根据传感器数据进行定向。这个功能是由google play中的一些App实现的,例如——Pocket

要做到这一点,我已经覆盖了

public void onConfigurationChanged(Configuration newConfig)

现在,如果我通过使用设置锁定配置(orientation_dir 是存储在共享首选项中的方向值,并且它是正确的,因为我已经通过代码进行了调试。)

if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        }
        else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
        }

然后方向设置正确,但是当手机旋转时不会调用 onConfigurationChanged() 方法。

如果我这样设置方向

if(orientation_dir == Configuration.ORIENTATION_LANDSCAPE)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }
        else if(orientation_dir == Configuration.ORIENTATION_PORTRAIT)
        {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        }
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
}

然后未设置所需的方向。手机根据传感器数据重置方向。

我什至没有在方法中调用超级,因为我认为它可能设置错误,但它给了我异常“超级未调用”。

我正在尝试过去 2 天,但没有找到任何解决此问题的方法。

4

2 回答 2

5

通常onConfigurationChanged(),事件仅在发生配置更改时触发。在您的应用程序中,方向更改事件仅在屏幕可以自由旋转时发生。如果您已锁定屏幕方向,则不会触发屏幕方向事件。onConfigurationChanged()不监听负责旋转设备的传感器,但仅在发生适当事件时触发。

因此,您真正想要的是访问 aSensorManager并附加 a SensorListener。这是您聆听设备实际方向的方式。

这是一个非常好的演示,它演示SensorManager了手机方向的功能:

http://www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/

更新:方向传感器是一种复合传感器,可让开发人员更轻松。它实际上并不存在于手机中。是一款结合了加速度传感器和磁场传感器的非常简洁的传感器。根据文档( http://developer.android.com/guide/topics/sensors/sensors_position.html),OrientationSensor 目前已被弃用。

请参阅android 方向传感器的替代方案是什么?供样品使用。

它可能需要一些修复我没有测试太多。

于 2012-07-19T07:37:24.983 回答
0

onConfigurationChanged- 是让您的活动知道方向变化的通知。

您不应尝试在该方法中更改或修复方向。如果您将方向设置为横向或纵向,那么您将不会收到新的方向更改通知,因为活动的方向不会改变。可能您应该在您计划在方向发生变化时显示的小部件的事件处理程序中设置方向设置。

于 2012-07-19T06:52:53.870 回答