最近、iPhoneアプリのAndroidポートをリリースしました。アプリは、いくつかの機能のためにデジタルコンパスに依存しています。これはほとんどのデバイスでうまく機能していますが、コンパスが機能していないものもいくつかあります。説明のために、デバイスはonSensorChanged()メッセージを送っていないようです。
問題があると思われるデバイスがいくつかあります。Android2.2のHTCDesireAndroid2.2.3のMotorolaDroid
彼らは、コンパスを利用する他のアプリはうまく機能すると主張しています。
以下を使用してコンパスを開始します。
if ( magnetometer != null && accelerometer != null )
{
if ( compassOn )
{
sensorManager.registerListener( this, accelerometer, (int) (1000000 / kSensorUpdateFrequencyFast) );
sensorManager.registerListener( this, magnetometer, (int) (1000000 / kSensorUpdateFrequencyFast) );
}
else
{
sensorManager.registerListener( this, accelerometer, (int) (1000000 / kSensorUpdateFrequencySlow) );
sensorManager.registerListener( this, magnetometer, (int) (1000000 / kSensorUpdateFrequencySlow) );
}
}
磁力計と加速度計は、プログラムの起動時に以下を使用して初期化されます。
sensorManager = (SensorManager) getSystemService( SENSOR_SERVICE );
accelerometer = sensorManager.getDefaultSensor( Sensor.TYPE_ACCELEROMETER );
magnetometer = sensorManager.getDefaultSensor( Sensor.TYPE_MAGNETIC_FIELD );
上記のコードは、加速度計==nullまたは磁力計==nullの場合は登録が行われないことを示しています。磁力計がnullでない場合は、コンパス機能を非表示にするため、nullではないと確信しています。それで、多分加速度計はこれらの電話でヌルですか?
私のonSensorChanged()のコードはかなり標準的であり、Web上で見つけることができる無数の例に基づいています。
では、なぜコンパスコードがこれらのデバイスで機能しないのかについて誰かが考えていますか?