2
나는 장치의 나침반 각도를 파일에 기록하는 안드로이드 응용 프로그램을 만들고 있습니다.임의의 값을 반환하는 안드로이드 자력계
방법 1 :
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor orientationSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ORIENTATION);
mSensorManager.registerListener(this, orientationSensor, SensorManager.SENSOR_DELAY_NORMAL);
public void onSensorChanged(SensorEvent event) {
float azimuthInDegrees = event.values[0]
}
방법 2 : 나는 북쪽 방향으로 내 장치를 배치하여 두 가지 방법을 시도
SensorManager mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
Sensor accelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
Sensor magnetometer = mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
mSensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_NORMAL);
mSensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_NORMAL);
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 azimuthInDegress = ((float) Math.toDegrees(orientation[0]) + 360) % 360;
}
}
}
이 메소드이 학위를 얻을 수 있습니다 (약 360도) :
방법 1 반환 완벽한 결과를하지만 불행히도이 방법은 사용되지 않습니다 :
- 359.6567
- 359.5034
- 359.859
- 359.76212
- 359.8878
- 359.87048
- 359.8356
- 359.80356
- 359.81192
- 359.7671
- 359.84668
- 359.88528
방법 2도 좋은 결과를 반환하지만 가끔 (무작위로) 그것은 잘못된도 반환
- 359.91495
- 을 359.83652 263.67697
- 359.67993 359.70038
- 359.688
- 359.71155 359.70276
- 359.6984 359.6429
- 270.6323
- 359.62302 01,234,709
당신이 볼 수 있듯이 359.4947
이러한 결과를 얻을 때 어떤 위치가 장치입니까? 예를 들어 장치를 똑바로 들고있는 것. –
나는 그것을 내 손에 들고있다. 거의 평평한 – user1135357
그냥 바꾸시겠습니까? = event.values to event.values.clone() 지금은 여전히 동일한 동작을하는지보십시오. –