jee*_*evs 5 android android-orientation
我正在制作一个允许您阅读维基百科页面的应用程序。
我想每次将手机从纵向旋转到横向时都显示一个图标,反之亦然。如果用户愿意,它将让用户锁定屏幕方向,否则屏幕将根据传感器数据进行定向。这个功能是由google play中的一些App实现的,例如——Pocket
要做到这一点,我已经覆盖了
public void onConfigurationChanged(Configuration newConfig)
Run Code Online (Sandbox Code Playgroud)
现在,如果我通过使用设置锁定配置(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);
}
Run Code Online (Sandbox Code Playgroud)
然后方向设置正确,但是当手机旋转时不会调用 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);
}
Run Code Online (Sandbox Code Playgroud)
然后未设置所需的方向。手机根据传感器数据重置方向。
我什至没有在方法中调用超级,因为我认为它可能设置错误,但它给了我异常“超级未调用”。
我正在尝试过去 2 天,但没有解决此问题的任何方法。
通常onConfigurationChanged()事件仅在发生配置更改时触发。在您的应用程序中,仅当屏幕可以自由旋转时才会发生方向更改事件。如果您已锁定屏幕方向,则不会触发屏幕方向事件。onConfigurationChanged()不侦听负责旋转设备的传感器,但仅在发生适当的事件时触发。
所以你真正想要的是访问 aSensorManager并附加一个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 方向传感器的替代方案是什么?供样品使用。
它可能需要一些修复,我还没有对其进行太多测试。
| 归档时间: |
|
| 查看次数: |
1964 次 |
| 最近记录: |