我正在制作一个允许您阅读维基百科页面的应用程序。
每次手机从纵向旋转到横向或反之亦然时,我想显示一个图标。如果他愿意,它将允许用户锁定屏幕方向,否则屏幕根据传感器数据定向。这个功能是由谷歌播放中的一些应用程序实现的,例如 - 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);
}
然后未设置所需的方向。手机根据传感器数据重置方向。
我试过甚至没有在方法中调用super,因为我认为它可能设置错误但是它给了我一个例外“Super not called”。
我正在尝试最近2天,并且没有解决这个问题。
答案 0 :(得分:4)
通常onConfigurationChanged()
事件仅在发生配置更改时触发。在您的应用中,只有在屏幕可以自由旋转时才会发生方向更改事件。如果您已锁定屏幕方向,则不会触发屏幕方向事件。 onConfigurationChanged()
不会听取负责旋转设备的传感器,但只会在发生相应事件时触发。
所以你真正想要的是访问SensorManager
并附上SensorListener
。这是您收听设备实际方向的方法。
这是一个非常好的演示,演示了SensorManager
功能与电话的方向:
http://www.workingfromhere.com/blog/2009/03/30/orientation-sensor-tips-in-android/
更新:方向传感器是一种复合传感器,可以让开发人员更轻松。它实际上并不存在于手机中。是一个非常整洁的传感器,结合了accelometer传感器和磁场传感器。而OrientationSensor目前根据文档(http://developer.android.com/guide/topics/sensors/sensors_position.html)被删除。
请参阅What is the alternative to android orientation sensor?了解样本用法。
它可能需要一些修复我还没有进行过多次测试。
答案 1 :(得分:0)
onConfigurationChanged
- 通知让您的活动了解方向的变化。
您不应尝试更改或修复该方法中的方向。如果将方向设置为横向或纵向,则不会获得新的方向更改通知,因为活动的方向不会更改。可能是您应该在方向更改时计划显示的窗口小部件的事件处理程序中设置方向设置。