私はここ数日小さなコンパスアプリに取り組んでいて、コードを起動して実行していますが、コンパスの読み取りが正確ではないようです。両方の電話を調整した後、私がこれを見つけた最初のテストでは、電話を単に保持し、平らな面で読み取り値を見て、それを水平に裏返し、同じ平らな面(180 *回転)に置いたところ、値は180*を変更しないでください。240*に近かったです。
次に、読み取り値とコンパスをテストしました。読み取り値が近いように見えることもありましたが、他のポイントでは50*以上ずれていました。私は自分の電話とコンパスを床に置いて、コンパスを磁気干渉から遠ざけて同じ結果を得ようとしました(本の端に並べてコンパスと電話を同じ方向に保つことにも注意してください) 。
次に、サンプルアプリケーションを別の電話に配置しました(最初はネクサスS、2番目はモトローラドロイド1)。2つの電話の間の違いは、いくつかのポイントで等しいことから、ほとんどのポイントで50〜15度離れていることまでさまざまです。
私はドキュメントを調べ、また多くの異なるフォーラムの投稿を調べましたが、同じ結果が得られた人は誰もいません。コードに小さなエラーがあり、読み取り値が正しく表示されないか、文書化されたバグが表示されていない可能性があります。
任意の洞察や提案をいただければ幸いです!
これが私のSensorEventListenerクラスのセンサー変更コードです
public void onSensorChanged(SensorEvent event)
{
// If the sensor data is unreliable return
if (event.accuracy == SensorManager.SENSOR_STATUS_UNRELIABLE)
{
Toast.makeText(main.this, "Sensor Status Unreliable",Toast.LENGTH_SHORT).show();
}
// Gets the value of the sensor that has been changed
switch (event.sensor.getType())
{
case Sensor.TYPE_ACCELEROMETER:
m_vfgravity = event.values.clone();
break;
case Sensor.TYPE_MAGNETIC_FIELD:
m_vfgeomag = event.values.clone();
break;
}
if (m_vfgravity != null && m_vfgeomag != null)
{
if(SensorManager.getRotationMatrix(m_vfinR, m_vfI, m_vfgravity, m_vfgeomag))
{
SensorManager.getOrientation(m_vfinR, m_vforientVals);
m_fCompBearing = (float) Math.round((Math.toDegrees(m_vforientVals[0])) *2)/2;
//convert to 0-360 from -180-180
if(m_fCompBearing < 0.0)
{
m_fCompBearing = 360 + m_fCompBearing;
}
mCompHead.setText("" + (int)m_fCompBearing);
}
calcOffset();
rotateCmp();
}
}
そして、私のアクティビティの作成をコーディングします
mSMngr = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSListener = new cSensorListener();
mSMngr.registerListener(mSListener,
mSMngr.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_UI);
mSMngr.registerListener(mSListener,
mSMngr.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_UI);
前もって感謝します!
編集:ドロイドXでも試してみましたが、これまでで最悪の結果になりました...電話を45度回転させると(コンピューターの座標系でz軸を中心に回転)、返されるコンパスの方位は180度以上変化する可能性があります。実際には方位の値です。同じ方向に回転すると、他の電話とは反対の方向に進みます。これは、設定で調整した後でもこの結果を生成する唯一の電話です。また、彼らは私がテストしたコンパスライブ壁紙であり、同じ問題はありません。だから私はこれを避けるためにソフトウェアで何かできることがあると思います。