1

现在这似乎是一个众所周知的问题,但公认的解决方法似乎对我们不起作用。

在 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 未被调用的问题第一次。

有没有人成功解决这个问题?

4

0 回答 0