0

Android 용 나침반 앱을 만들고 있습니다. 자이로 스코프, 가속도계 및 자력계를 사용하여 방위각을 캡처했습니다 (사용 된 자습서는 here 참조). 불행히도, 나침반 읽기 기능은 장치가 땅에 평행하게 놓여있을 때만 작동합니다 (예 : 탁자 위/손바닥 등). 장치를 완전히 직립 한 위치로 기울일 때마다 (스크린이 나와 마주 보게 됨) 나침반은 잘못된 판독 값을 제공합니다. 장치의 방향 자체가 바뀔 때 축이 변경되기 때문이라고 가정합니다. 어떻게 이런 일이 일어나지 않도록합니까? 나는이 두 위치 모두에서 나침반을 작동시키고 싶다 :지면에 평행하고 완전히 직립 한 위치. 어떻게해야합니까? 누군가 내게 올바른 방향으로 밀어 줄 수 있다면, 그것은 매우 도움이 될 것입니다.자이로 스코프/나침반 및 장치 오리엔테이션

도움 주셔서 감사합니다. : D

+0

당신이 읽어 그래서이 질문은? http://stackoverflow.com/questions/10192057/android-getorientation-method-returns-bad-results –

답변

0

는 다음과 같이 당신의 SensorFusionActivity에 mDisplay 변수를 추가 : 마지막으로

mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

을 calculateAccMagOrientation 이런 식으로 수정 :

private Display mDisplay = null; 

를 다음에서 onCreate 방법에 다음 코드를 추가

// calculates orientation angles from accelerometer and magnetometer output 
public void calculateAccMagOrientation() { 
    if(SensorManager.getRotationMatrix(rotationMatrix, null, accel, magnet)) { 

     int rotation = mDisplay.getRotation(); 

     if(rotation == Surface.ROTATION_0) 
      SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_Y, SensorManager.AXIS_X, rotationMatrix); 
     else if(rotation == Surface.ROTATION_180) 
      SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_Y, SensorManager.AXIS_MINUS_X, rotationMatrix); 
     else if(rotation == Surface.ROTATION_270) 
      SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_MINUS_X, SensorManager.AXIS_MINUS_Y, rotationMatrix); 

     SensorManager.getOrientation(rotationMatrix, accMagOrientation); 
    } 
} 
관련 문제