BlackBerry Storm AccelerometerListener не уведомляется о первом изменении ориентации - PullRequest
1 голос
/ 17 сентября 2009

Это, кажется, хорошо известная проблема сейчас, но принятый обходной путь, кажется, не работает для нас.

В 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 () слушателя. Это происходит, но только на втором и каждом последующем щелчке устройства. Первое изменение ориентации всегда игнорируется.

Принятое решение, плавающее в сети, похоже, вызывает call:

Ui.getUiEngineInstance().setAcceptableDirections(...);

... при запуске приложения с ограниченными параметрами, такими как:

Display.DIRECTION_NORTH 

... и затем вызвать его снова в какой-то момент позже с параметрами, которые фактически желательны, например:

Display.DIRECTION_NORTH|Display.DIRECTION_WEST|Display.DIRECTION_EAST

Полагаю, это предназначено для сброса или запуска привязок акселерометра к приложению.

Но описанный выше обходной путь, похоже, не работает для нас (неясно, где должны выполняться вызовы setAcceptableDirections (...), для одного), и мы все еще застряли с проблемой AccelerometerListener, не вызывается в первый раз.

Кто-нибудь успешно разрешил это?

...