Android: Holen Sie sich die Lage des Gerätes aus Azimut -, roll - & Tonhöhe

Ich brauche, um das aktualisierte Gerät Orientierung, aber ich muss fix meine Aktivität auf Hochformat (die habe ich in der layout-xml-Datei), die verhindert, dass mir die aus der Nutzung dieser:

int rotation = getWindowManager().getDefaultDisplay().getRotation();

weil es gibt mir immer den portrait-rotation,

So, ich versuche, verlassen Sie sich auf die sensoren. Ich fand, dass Sensor.TYPE_ORIENTATION ist veraltet, so dass ich mit einer Kombination von Sensor.TYPE_ACCELEROMETER & Sensor.TYPE_MAGNETIC_FIELD und hier ist der event-listener:

SensorEventListener sensorEventListener = 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 orientationData[] = new float[3];
                SensorManager.getOrientation(R, orientationData);
                azimuth = orientationData[0];
                pitch = orientationData[1];
                roll = orientationData[2];
                //now how to use previous 3 values to calculate orientation
            }
        }
    }

    @Override
    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        //TODO Auto-generated method stub

    }
};

Nun Frage ist, wie man die 3 Werte azimuth, pitch & roll zu erkennen, die aktuellen Geräte-Orientierung als eine von diesen:

  • Landschaft (rotation 0)
  • Portrait (Drehung 90)
  • Reverse-Querformat (Drehung-180)
  • Reverse Portrait (rotation 270)
Es gibt keine Notwendigkeit für ein magnetisches Feld. Siehe stackoverflow.com/questions/11175599/...
das sieht gut aus, aber in diesem Fall, was wäre die Parameter der getRotationMatrix ?
Das Gerät Orientierung ist unabhängig von Azimut, pitch und roll. Wenn Sie nur wollen, um das Gerät zu finden-Orientierung, dann gibt es keine Notwendigkeit zu finden, die rotationsmatrix und somit keine Notwendigkeit zu nennen getRotationMatrix. Ansonsten müssen Sie noch die Berechnung, die ich gepostet.
Aber die Antwort, die du weiter oben geschrieben fehlt etwas "Für den Fall, dass Sie flach, Sie müssen verwenden Sie einen Kompass, um zu sehen, wie viel Sie das Gerät drehen, um von der Startposition."
OK, Sie haben übergeben, in der die Schwerkraft und Magnetfeld für die Parameter in der flach-Fall und verwenden Sie den Azimut zu sehen, wie viel das Gerät drehen von der ursprünglichen position. Aber dies wird Ihnen nicht sagen, die Ausrichtung des Geräts, denn die Ausrichtung ist abhängig davon, wie der Anwender statt der Geräte. Es nur Ihnen sagen, wie viel das Gerät drehen, aus der ursprünglichen position, wo der Anwender statt der Geräte.

InformationsquelleAutor AbdelHady | 2014-09-22

Schreibe einen Kommentar