Подшипник для компаса Android

Я пытаюсь получить знак компаса в градусах (то есть 0-360), используя следующий метод:

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); } } } 

Значение азимута (т.е. orientation[0] ) должно быть 0 <= азимут <360, но я получаю только значения от -3 до 3 при вращении моего устройства. Может кто-нибудь, пожалуйста, скажите мне, что может быть проблемой?

    Значения находятся в радиусе, вам нужно преобразовать в степень дуги

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

    Это правда, что в Radians. Спасибо Хоан. Я добавил некоторую логику, чтобы получить этот подшипник в градусах от 0 до 360, потому что, если бы я только преобразовал его в градусы, я получал значения от -180 до 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)); } 
    Intereting Posts
    Обновление БД Firebase из фоновой службы Какова частота кадров экрана Предупреждение слишком много ссылок на атрибуты. Возможные причины? Изменение цвета нижней строки EditText с помощью appcompat v7 Google отказался от Eclipse в качестве инструмента разработки? «Ошибка анализа: проблема с парсией пакета» при установке приложения Android Android Studio – Паника: не удалось открыть AVD Изменение цвета фона popupmenu при использовании библиотеки поддержки Показать все элементы в AutocompleteTextView без ввода текста Как сбрасывать компоненты компонента пользовательского интерфейса Android и его данные, чтобы помочь решить трудновоспроизводимые ошибки Ошибка плагина: требуется плагин «Поддержка Android» отключен Сделать предпочтение отключенным, но регистрировать клики В чем разница между Intent.FLAG_ACTIVITY_CLEAR_TOP и финишем в android В OSX, sdk android не может найти sdkmanager.jar – путь кажется правильно установленным Почему мой курсор не закрыт в Android-активности?