これは現在よく知られている問題のようですが、受け入れられている回避策はうまく機能していないようです。
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()を呼び出すように強制されます。これは実際に発生しますが、デバイスの2回目以降の各フリップでのみ発生します。最初の向きの変更は常に無視されます。
ネットの周りに浮かんでいる受け入れられた解決策は、呼び出しを強制することであるようです:
Ui.getUiEngineInstance().setAcceptableDirections(...);
...アプリが起動されたとき、次のような制限されたパラメーターを使用します。
Display.DIRECTION_NORTH
...その後、次のような実際に必要なパラメータを使用して、後で再度呼び出すことができます。
Display.DIRECTION_NORTH|Display.DIRECTION_WEST|Display.DIRECTION_EAST
これは、アプリへの加速度計のバインディングを何らかの方法でリセットまたはキックスタートするためのものだと思います。
ただし、上記の回避策は機能していないようです(たとえば、setAcceptableDirections(...)呼び出しがどこで行われるかは不明です)。また、AccelerometerListenerが呼び出されないという問題が発生します。初めて。
誰かがこれをうまく解決しましたか?