Недавно мы выпустили порт Android для приложения для iPhone. Приложение опирается на цифровой компас для некоторых функций. Это хорошо работает на большинстве устройств, но есть некоторые, где компас не работает. Для описания кажется, что устройство не передает нам никаких сообщений onSensorChanged ().
Несколько устройств, которые кажутся проблемными:
HTC Desire на Android 2.2
Motorola Droid на Android 2.2.3
Они утверждают, что другие приложения, использующие компас, работают нормально.
Запускаем компас, используя:
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 );
Теперь приведенный выше код указывает, что регистрация не происходит, если акселерометр == ноль или магнитометр == ноль. Я почти уверен, что магнитометр не равен нулю, потому что если это так, мы скрываем функцию компаса. Так, может быть, акселерометр нулевой на этих телефонах?
Код в моем onSensorChanged () довольно стандартный и основан на бесчисленных примерах, которые вы можете найти в Интернете.
Так есть ли у кого-нибудь мысли о том, почему код компаса может не работать на этих устройствах?