0

SO imは、電話がコンパスを介してどの方向を向いているかを追跡するアプリを作成しようとしています。画面上でボタンを押すと、指している場所の数が度数で表示されます。これまでのところ、コンパスがどのように作成されているかは理解していますが、どの値が北に対して向いている方向であるかを見つけることができません。これが私がこれまでに持っているものです。

public class compass extends Activity implements OnClickListener, SensorEventListener{

    private final SensorManager DirPoint;
    float var;
    TextView theNumber;

    Button DirectionIn;

    public compass(){ 
        DirPoint = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {}
    public void onSensorChanged(SensorEvent event) {}

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        theNumber = (textView) findViewById(R.id.output);
        DirectionIn =(Button) findViewById(R.Id.Buton);

        DirectionIn.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {
                //gets direction of phone compass
                // ((TextView)findViewById(R.id.output)).setText(var);
            }
        }
    }
}

どんな助けも歓迎されるでしょう、または正しい方向に向かっているなら、それはいいでしょう.

4

2 に答える 2

0

詳細はこちら

TYPE_ACCELEROMETER と TYPE_MAGNETIC_FIELD の組み合わせを使用します。

        Sensor beschleunigung = sensor.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
        Sensor magnetometer = sensor.getSensorList(Sensor.TYPE_MAGNETIC_FIELD).get(0);
        sensor.registerListener(handler, beschleunigung, SensorManager.SENSOR_DELAY_NORMAL, null);
        sensor.registerListener(handler, magnetometer, SensorManager.SENSOR_DELAY_NORMAL, null);

handler = new SensorEventListener() {
        float[] mGravity;
        float[] mGeomagnetic;

        @Override
        public void onSensorChanged( SensorEvent event ) {
            if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
                mGravity = event.values;
            if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD)
                mGeomagnetic = event.values;
            if (mGravity != null && mGeomagnetic != null) {
                float R[] = new float[9];
                float I[] = new float[9];
                boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
                if (success) {
                    float orientation[] = new float[3];
                    SensorManager.getOrientation(R, orientation);
                    azimut = orientation[0]; // orientation contains: azimut, pitch and roll
                }
            }

            NavigationArrow.this.setOffsetFromNorth((float) Math.toDegrees(azimut));
        }

        @Override
        public void onAccuracyChanged( Sensor sensor, int accuracy ) {

        }
    };

それが役立つことを願っています:)

于 2013-08-01T06:24:07.090 に答える