2010-07-07 4 views
5

휴대 전화의 방향을 검색해야합니다.Android - SensorManager getOrientation의 이상한 동작

public void onSensorChanged(SensorEvent event) { 
    switch (event.sensor.getType()){ 
    case Sensor.TYPE_MAGNETIC_FIELD: 
    this.mag_vals = event.values.clone(); 
    this.sensorReady = true; 
    break; 
    case Sensor.TYPE_ACCELEROMETER: 
    this.acc_vals = event.values.clone(); 
    break; 
    } 
    if (this.mag_vals != null && this.acc_vals != null && this.sensorReady) { 
    this.sensorReady = false; 
    float[] R = new float[ProjectConstants.SIZE_MATRIX]; 
    float[] I = new float[ProjectConstants.SIZE_MATRIX]; 
    SensorManager.getRotationMatrix(R, I, this.acc_vals, this.mag_vals); 

    SensorManager.getOrientation(R, this.actual_orientation); 
    ... 

이 코드는 내가 평평한 표면에 휴대폰을두고 내가 표면을 회전하는 경우 나 전화의 방향을 얻을 수 있습니다 : 순간 나는이를 썼다.

제가 이해가 안되는 이유는 전화가 위쪽으로 이동하면 this.actual_orientation[0] 값이 표시됩니다. [여기] [1]에서 설명한대로 zed 축의 회전은 회전이 없어도 값이 증가합니다.

누군가가 어떤 일이 발생했는지 알고 있었습니까?

편집 내가 직장에서 사무실에서 내 응용 프로그램을 시도하고 내가 같은 사무실에서 시도 내가 전에 설명하는 이상한 행동 .. (같은 상황이 있었다

또 다른 이상한 것은 ..) 나 시장에서 가져온 나침반 응용 프로그램과 내 같은 행동을했다. 내가 전화를 위쪽으로 이동했을 때 값이 일관되게 변했다. 나는 같은 사무실 (같은 상황)에서 i-phone 나침반을 시험해 보았다. 그 이상한 행동을하지 않았다! 내가 집에 도착했을 때

그럼 난 ... 모두가 내 응용 프로그램 내 안드로이드 폰의 나침반 응용 프로그램, 그들은 내가 값이 안정 위쪽으로 전화를 이동해도 !! 일

감사합니다 시도 제비.

[1] : http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation(float[]

답변

4

장치에 의해 얻어지는 방향 추정은 로컬 자장 방향에 일부 의존한다)] 로트. 건물 내, 철 구조물 근처 및 전기 제품 근처에서 감지 된 자기장은 피트 단위로 측정 한 거리에 따라 크게 다를 수 있습니다. 이 효과는 휴대용 자력계 또는 가우스 미터를 통해 쉽게 볼 수 있습니다.

이러한 왜곡이 응용 프로그램의 이상한 동작을 일으키는 것으로 의심됩니다.

1

회전 각도를 올리면 getOrientation의 리턴 값에 영향을 미칩니다. 회전 각도는 정상적인 위치에서 기기의 회전 양을 측정합니다. 즉 일반적인 위치가 세로를 의미하는 대부분의 기기의 경우 휴대 전화가 가로 방향 인 경우 회전 각도는 90 또는 -90입니다. 올바른 읽기를 원하면 getOrientation을 호출하기 전에 remapCoordinateSystem을 호출해야합니다.