现在这似乎是一个众所周知的问题,但公认的解决方法似乎对我们不起作用。
在 BlackBerry Storm(JDE 4.7,4.7+ 模拟器的标准集)上,以下代码注册了一个AccelerometerListener。侦听器不会在设备方向的第一次更改时被调用,但会在每次后续的方向更改时被调用。
net.rim.device.api.system.AccelerometerSensor.Channel channel;
void registerAccelerometerListener()
{
if ( AccelerometerSensor.isSupported() )
{
channel = AccelerometerSensor.openOrientationDataChannel(
Application.getApplication());
channel.setAccelerometerListener(this);
// this class does indeed implement the AccelerometerListener interface
}
}
public void onData(AccelerometerData data)
{
// should be called on every orientation change,
// but is only called on the second (and subsequent) orientation
// change, ignoring the first.
}
使用上面的代码,以纵向模式启动应用程序,然后将设备翻转到一侧(或进行任何其他方向更改)应该会强制加速度计调用侦听器的onData()。这确实会发生,但仅发生在设备的第二次和每次后续翻转中。第一次方向变化总是被忽略。
网上流传的公认解决方案似乎是强制调用:
Ui.getUiEngineInstance().setAcceptableDirections(...);
...当应用程序启动时,使用受限参数,例如:
Display.DIRECTION_NORTH
...然后在稍后使用实际需要的参数再次调用它,例如:
Display.DIRECTION_NORTH|Display.DIRECTION_WEST|Display.DIRECTION_EAST
我认为这意味着以某种方式重置或启动加速计绑定到应用程序。
但是上面的解决方法似乎对我们不起作用(不清楚 setAcceptableDirections(...) 调用的位置,例如),我们仍然遇到 AccelerometerListener 未被调用的问题第一次。
有没有人成功解决这个问题?