10
私はコンパスのアプリケーションを開発しています。コンパスは通常の北ではなく、特定の緯度経度を指し示します。私はいくつかは私の問題に関連してquestionsが見つかりましたが、私はそれらを私のために働くように管理していません。私のコードは以下の通りです:Androidコンパスが北の代わりに私の場所を指している
public class MainActivity extends AppCompatActivity implements SensorEventListener {
private ImageView image;
private float currentDegree = 0f;
private SensorManager mSensorManager;
private TextView tvHeading;
private Location location = new Location("A");
private Location target = new Location("B");
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
image = (ImageView) findViewById(R.id.imageViewCompass);
tvHeading = (TextView) findViewById(R.id.tvHeading);
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
location.setLatitude(54.903535);
location.setLongitude(23.979342);
target.setLatitude(54.904618);
target.setLongitude(23.978782);
}
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION),
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
super.onPause();
mSensorManager.unregisterListener(this); // to stop the listener and save battery
}
@Override
public void onSensorChanged(SensorEvent event) {
float degree = Math.round(event.values[0]);
tvHeading.setText("Heading: " + Float.toString(degree) + " degrees");
RotateAnimation ra = new RotateAnimation(
currentDegree,
-degree,
Animation.RELATIVE_TO_SELF, 0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
ra.setDuration(210);
ra.setFillAfter(true);
image.startAnimation(ra);
currentDegree = -degree;
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// not in use
}
}
現在のところ、私のポインタはハーココード化されたターゲット位置の代わりに北にしか表示されません。
を変更している方法だ私は、これはまさにあなたが探しているではないと思います受け入れられた解決策を試してみると、助けが得られるかもしれません。http://stackoverflow.com/questions/4308262/calculate-compass-bearing-heading-to-location-in-android – Raghavendra