2016-02-28 6 views
2

Я пытаюсь сделать компас, указывающий на определенную долготу/широту, но я не знаю, как это делается, поэтому я буду признателен любая помощь :)Как сделать компас, который находит/указывает на определенные координаты в android

Это компас. Что я должен добавить/изменить, чтобы решить долготу/широту?

public class MainActivity extends Activity implements SensorEventListener { 

private ImageView mPointer; 
private SensorManager mSensorManager; 
private Sensor mAccelerometer; 
private Sensor mMagnetometer; 
private float[] mLastAccelerometer = new float[3]; 
private float[] mLastMagnetometer = new float[3]; 
private boolean mLastAccelerometerSet = false; 
private boolean mLastMagnetometerSet = false; 
private float[] mR = new float[9]; 
private float[] mOrientation = new float[3]; 
private float mCurrentDegree = 0f; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    mSensorManager = (SensorManager)getSystemService(SENSOR_SERVICE); 
    mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
    mMagnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); 
    mPointer = (ImageView) findViewById(R.id.pointer); 
} 

protected void onResume() { 
    super.onResume(); 
    mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME); 
    mSensorManager.registerListener(this, mMagnetometer, SensorManager.SENSOR_DELAY_GAME); 
} 

protected void onPause() { 
    super.onPause(); 
    mSensorManager.unregisterListener(this, mAccelerometer); 
    mSensorManager.unregisterListener(this, mMagnetometer); 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    if (event.sensor == mAccelerometer) { 
     System.arraycopy(event.values, 0, mLastAccelerometer, 0, event.values.length); 
     mLastAccelerometerSet = true; 
    } else if (event.sensor == mMagnetometer) { 
     System.arraycopy(event.values, 0, mLastMagnetometer, 0, event.values.length); 
     mLastMagnetometerSet = true; 
    } 
    if (mLastAccelerometerSet && mLastMagnetometerSet) { 
     SensorManager.getRotationMatrix(mR, null, mLastAccelerometer, mLastMagnetometer); 
     SensorManager.getOrientation(mR, mOrientation); 
     float azimuthInRadians = mOrientation[0]; 
     float azimuthInDegress = (float)(Math.toDegrees(azimuthInRadians)+360)%360; 
     RotateAnimation ra = new RotateAnimation(
       mCurrentDegree, 
       -azimuthInDegress, 
       Animation.RELATIVE_TO_SELF, 0.5f, 
       Animation.RELATIVE_TO_SELF, 
       0.5f); 

     ra.setDuration(250); 

     ra.setFillAfter(true); 

     mPointer.startAnimation(ra); 
     mCurrentDegree = -azimuthInDegress; 
    } 
} 

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

} 

} 

Возможно, это немного неясно. Предположим, что я снаружи, и я хочу знать направление определенного места. Это приложение должно помочь мне найти направление

ответ

0

Вам не нужен компас для этого. Вам нужно получить текущее местоположение, а затем использовать метод bearingTo в классе Location.

+0

эй, у меня есть вопрос http://stackoverflow.com/questions/35737607/how-to-see-if-word-exists-in-dictionary –