Android Kompasslager

Ich versuche, den Kompass in Grad zu erhalten (dh 0-360) mit der folgenden Methode:

float[] mGravity; float[] mGeomagnetic; 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); float azimut = orientation[0]; bearing.setText("Bearing: "+ azimut); } } } 

Der Azimutwert (dh orientation[0] ) sollte 0 <= Azimut <360 sein, aber ich bekomme nur Werte von -3 bis 3, während ich mein Gerät drehe. Kann mir bitte jemand sagen was das Problem vielleicht sein könnte?

  • Was ist der Standard-Timeout-Wert von java.net.Socket in Android?
  • Wie benutzt man benutzerdefinierte Schriftart in android xml?
  • Konnte keine ionic.config.json Datei finden
  • Wie bekomme ich ImageView vor Kartenansicht? Wenn beide von Relative Layout childs sind
  • Das zuletzt gewählte Datum wird nicht in den Dialog "datepicker"
  • ActionBarSherlock: Untermenü mit Menü-Taste öffnen
  • Android Studio zeigt Fehler (Missing Translation) nach der Aktualisierung
  • Wie man die Textansicht blinkt
  • Android - Unfähig, die Aktivität nach dem Ende zu zerstören, verursacht durch IllegalStateException: Kann diese Aktion nach onSaveInstanceState nicht ausführen
  • Wie kann man überprüfen, ob ein Benutzer Google+ angemeldet hat?
  • Android: Wie man App in verschiedene Sprachen zu übersetzen und auf dem Markt zu verkaufen?
  • Senden Sie Text Tag zu Instagram mit meiner Android-App
  • 3 Solutions collect form web for “Android Kompasslager”

    Die Werte sind in radian, du musst in Bogengrad umwandeln

     int azimut = (int) Math.round(Math.toDegrees(orientation[0])); 

    Es ist wahr, dass es in Radians ist. Danke Hoan. Ich habe einige Logik hinzugefügt, um dieses Lager in Grad von 0 bis 360 zu bekommen. Wenn ich es nur in Grad umwandelte, bekam ich Werte von -180 bis 180.

     float azimuthInRadians = orientation[0]; float azimuthInDegress = (float)Math.toDegrees(azimuthInRadians)+360)%360; 
     This answer applies to Google Maps api v2. It is possible by registering your application with Sensor Listener for Orientation and get the angle relative to true north inside onSensorChanged and update camera accordingly. Angle can be used for bearing. Following code can be used: Instead of using Sensor.TYPE_ORIENTATION try using getOrinetation api. Sensor.TYPE_ORIENTATION has been deprecated. @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); if (sensorManager != null) sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); } public void onSensorChanged(SensorEvent event) { float compassBearingRelativeToTrueNorth = Math.round(event.values[0]); Log.d(TAG, "Degree ---------- " + degree); updateCamera(compassBearingRelativeToTrueNorth); } private void updateCamera(float bearing) { CameraPosition oldPos = googleMap.getCameraPosition(); CameraPosition pos = CameraPosition.builder(oldPos).bearing(bearing) .build(); googleMap.moveCamera(CameraUpdateFactory.newCameraPosition(pos)); } 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.