2011-11-25 2 views
3

"컴퍼스"에 약간 문제가 있습니다.올바른 "컴퍼스 데이터"를 얻기 위해 왜 휴대폰을 흔들어야합니까?

내가 카메라로보고있는 방향의 화면에 표시하고 싶습니다. 가로 모드에서 실행 중일 때 CameraViewActivity이 있습니다.

이제 센서로 방향을 잡으려고하지만 잘못된 것이 있습니다. 앱을 시작하면 이상한 데이터가 표시되지만 휴대 전화를 흔들면 올바른 데이터가 표시됩니다.

어쩌면 나를 도울 수 있습니다.

public void onSensorChanged(SensorEvent event) { 

    int type = event.sensor.getType(); 
    if (type == Sensor.TYPE_ACCELEROMETER) { 
     mGrav = event.values.clone(); 
    } else if (type == Sensor.TYPE_MAGNETIC_FIELD) { 
     mMag = event.values.clone(); 
    } 

    if (SensorManager.getRotationMatrix(mRinn, null, mGrav, mMag)) { 
     SensorManager.remapCoordinateSystem(mRinn, SensorManager.AXIS_X, SensorManager.AXIS_Z, mRout); 

     SensorManager.getOrientation(mRout, mOrient); 

     //Logger.d("direction?: " + Math.toDegrees(mOrient[0])); 
     setOrientationText(Math.toDegrees(mOrient[0])); 
    } 
} 

나는 두 개의 센서 (자석과 바로 연결) 다음 RotationMatrix을 (문서 나에게처럼) 생성하는 데이터를 얻고있다 : 이것은 내 onSensorChanged 방법이다. 프리젠 테이션의 경우 RotationMatrix에 X -> X Axis 및 Y -> Z Axis를 넣습니다.

이 활동의 ​​screenOrientation은 가로 방향입니다.

하지만 실제로 휴대 전화를 흔들면 정확한 데이터를 가져 오는 이유를 이해하지 못합니다.

+1

아주 좋은 질문. 도움이되지 않는 대답은 '나침의가 필요합니다'입니다. 내 전화기에는 테스트 모드에있는 전화 키패드 시퀀스가 ​​있으며 나침반 보정이 필요하다는 것을 알 수 있습니다. 어떤 근거로이 결정을 내릴 지, 나도 알고 싶어한다. – NickT

+0

나는 아이폰 사용자가 작은 장난감 자동차처럼 그의 전화기를 흔들고있는 사람이라고 생각했다. 그것은 정말로 보정이 필요합니까? 그것은 "자기"가 아니야? 내 생각에, 내가 전화를 흔들면 화면의 방향이 가로에서 세로로 바뀌었다. 그러나 나는 풍경 모드에 아무것도 넣지 않았기 때문에 확신이 없다. ... – Informatic0re

+0

나는 G 센서를 보정하기 위해 propperty 항목을 발견했다. ,하지만 그것은 도움이되지 않습니다. 나침반은 항상 북쪽에 나타납니다. – Informatic0re

답변

0

이것은 센서 초기화와 관련된 문제라고 생각합니다. 내가 similar question에 대한 답을 볼 수 있습니다. 한마디로

는 :

측정 값은 축 (중 두 때때로 하나)의 일부 제로입니다. 이 문제는 방금 (registerListener()) 센서를 활성화 한 경우 발생하며 센서 종류가 과 관련 있다고 생각합니다. 가속 센서의 경우, 나는 장치의 작은 흔들림이 정확한 센서 판독 값을 제공하는 것을 시작한다는 것을 알게 된 을 관찰했습니다.

정확한 해결책은 센서 상태에 대한 정확한 정보를 에 제공하는 onAccuracyChanged() 메소드입니다.