Компас не работает на некоторых устройствах - PullRequest
1 голос
/ 27 декабря 2011

Недавно мы выпустили порт 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 () довольно стандартный и основан на бесчисленных примерах, которые вы можете найти в Интернете.

Так есть ли у кого-нибудь мысли о том, почему код компаса может не работать на этих устройствах?

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Я понял это. Оказывается, в 2.2 вы не можете использовать частоты сенсоров, отличные от стандартных SENSOR_DELAY_UI, SENSOR_DELAY_NORMAL и т. Д. В документации утверждается, что вы также можете указать количество микросекунд между уведомлениями, но они ложные.

Как только я использовал стандартные константы, он начал работать на 2.2

0 голосов
/ 28 декабря 2011

Вы не объяснили, что это значит, что компас не работает.

Если вы не получили действительные данные, это может быть хорошо известная проблема с этими устройствами. С моим мне нужно всегда закатать его в руках (как по горизонтали, так и по вертикали), чтобы разблокировать компас. Некоторые приложения называют это калибровка , но для меня это что-то абсурдное ... У меня HTC Desire.

...