2012-07-04 2 views
6

Использование Location.getBearing(); Кажется, что я случайно меняю подшипники.Устройство Android (GPS) Направление

Ака, я могу медленно повернуть устройство, и он не заметит, он просто выбирает свои случайные подшипники.

Я знаю, что устройство работает, так как значок «Ты здесь» в приложении «Карты» на планшете медленно вращается при вращении устройства.

Есть ли другой правильный способ получения подшипника? Я использую GPS. Возможно, есть лучший способ определить, с каким направлением вы сталкиваетесь.

+0

вы получите что-нибудь по своему усмотрению? Я сталкиваюсь с таким же поведением и ищет какое-то руководство. –

+0

@kaushaltrivedi Пожалуйста, см. Мой ответ :) выкопал его только для вас. На основе ответа heroms, но с проблемой ориентации, которую он поставил .. исправлено. – Doomsknight

ответ

3

Постарайтесь получить подшипник от датчика акселерометра и датчика магнитного поля (G-).

Вот учебник: http://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html

+0

Выглядит многообещающе, давая ему попробовать спасибо! – Doomsknight

+0

Собственно, это не учитывает ориентацию экрана. :/Я стараюсь делать свою работу. – Doomsknight

3

Location.getBearing() возвращает подшипник, рассчитанный для вас спутниками GPS. Это не представление в реальном времени заголовка вашего устройства. Приложение Google Maps использует встроенные G-датчики устройства, чтобы получить направление, с которым вы сталкиваетесь.

+1

Чтобы прояснить ситуацию, GPS-подшипник рассчитывается путем получения вектора между двумя точками вдоль пути перемещения, а не с помощью ускорителя для обнаружения движения устройства. –

+0

@Jon Так сказать, я двигаю метром назад, он предположит, что я двигался в данном направлении, но смотрел в другую сторону (вперед)? Я действительно задавался вопросом, почему мне нужно связаться со спутником, чтобы получить мое направление, поскольку нет никакого способа узнать, что я столкнулся с ним больше, чем устройство. – Doomsknight

+2

@ Doomsknight Да, это правильно, это покажет вам направление путешествия. Он вычисляет вектор направленности между точкой вашего сейчас и точкой, из которой вы только что пришли. Так, как вы сказали, если вы пройдете назад, он покажет вам, как идти в направлении движения, а не в направлении, с которым вы сталкиваетесь (в противоположность направлению движения). –

0

Исходя из ответа herom, используя ссылку: http://android-coding.blogspot.co.at/2012/03/create-our-android-compass.html

Я продлил свой класс для реализации датчика: extends Activity implements SensorEventListener

и реализован как предложено, но модифицировал его принять с учетом ориентации экрана.

Вот код, я пошел с:

@Override 
public void onSensorChanged(SensorEvent event) { 
    switch(event.sensor.getType()){ 
    case Sensor.TYPE_ACCELEROMETER: 
     for(int i =0; i < 3; i++){ 
      valuesAccelerometer[i] = event.values[i]; 
     } 
     break; 
    case Sensor.TYPE_MAGNETIC_FIELD: 
     for(int i =0; i < 3; i++){ 
      valuesMagneticField[i] = event.values[i]; 
     } 
     break; 
    } 

    boolean success = SensorManager.getRotationMatrix(
      matrixR, 
      matrixI, 
      valuesAccelerometer, 
      valuesMagneticField); 

    if(success){ 
     SensorManager.getOrientation(matrixR, matrixValues); 

     double azimuth = Math.toDegrees(matrixValues[0]); 
     //double pitch = Math.toDegrees(matrixValues[1]); 
     //double roll = Math.toDegrees(matrixValues[2]); 

     WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); 
     Display mDisplay = mWindowManager.getDefaultDisplay(); 

     Float degToAdd = 0f; 

     if(mDisplay.getRotation() == Surface.ROTATION_0) 
      degToAdd = 0.0f; 
     if(mDisplay.getRotation() == Surface.ROTATION_90) 
      degToAdd = 90.0f; 
     if(mDisplay.getRotation() == Surface.ROTATION_180) 
      degToAdd = 180.0f; 
     if(mDisplay.getRotation() == Surface.ROTATION_270) 
      degToAdd = 270.0f; 

     mapView.setFacingDirection((float) (azimuth + degToAdd)); //DEGREES NOT RADIANS 
    } 
} 
+0

можно посмотреть на http://stackoverflow.com/questions/35692195/android-heading-direction-not-showing-correct-heading –

Смежные вопросы