1

最近、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上で見つけることができる無数の例に基づいています。

では、なぜコンパスコードがこれらのデバイスで機能しないのかについて誰かが考えていますか?

4

2 に答える 2

1

私はこれを理解しました。2.2では、標準のSENSOR_DELAY_UI、SENSOR_DELAY_NORMALなど以外のセンサーレートを使用できないことが判明しました。ドキュメントには、通知間のマイクロ秒数も指定できると記載されていますが、それらは嘘をついています。

標準定数を使用すると、2.2で動作し始めました

于 2011-12-29T15:09:00.373 に答える
0

あなたはそれが何を意味するのか説明していません、そのコンパスは機能していません。

有効なデータを取得できない場合は、このデバイスのよく知られた問題である可能性があります。私の場合、コンパスのロックを解除するには、常に手で(水平方向と垂直方向の両方で)回転させる必要があります。一部のアプリはそれをキャリブレーションと呼んでいますが、私にとってそれはばかげたものです...私はHTCDesireを持っています。

于 2011-12-28T11:25:32.903 に答える