Это, кажется, хорошо известная проблема сейчас, но принятый обходной путь, кажется, не работает для нас.
В 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, не вызывается в первый раз.
Кто-нибудь успешно разрешил это?