2013-07-12 2 views
0

onSensorChanged() 메서드에서 v [0], v [1], v [2] 및 해당 방위각, 피치 및 롤 값을 계산하는 데 getRotationMatrix()를 사용하고 있습니다. boolean detectAzimuth가 true가 될 때 첫 번째 v [0] (또는 해당 방위각) 값을 firstAzimuth에 저장하는 방법이 궁금합니다.onSensorChanged() 메서드에서 시작 값만 저장하는 방법은 무엇입니까?

private boolean detectAzimuth = false; 
private float firstAzimuth; 

@Override 
public void onSensorChanged(SensorEvent event) { 

if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
    accValues = event.values.clone(); 
} 

if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { 
    geoValues = event.values.clone(); 
} 

boolean success = SensorManager.getRotationMatrix(r, i, accValues, 
    geoValues); 

if (success) { 
    SensorManager.getOrientation(r, v); 

    if (detectAzimuth) { 
    azimuth = v[0] * (180/Math.PI); 
    } 
    pitch = v[1] * (180/Math.PI); 
    roll = v[2] * (180/Math.PI); 
} 
} 

답변

0

처음으로 방위각 값을 확인할 수 있습니다. 당신이하지 않았다면, 가치를 얻고 detectAzimuth를 사실로 만드십시오. 그런 다음 SharedPreference에 값을 저장하십시오.

이제 다음 번에는 부울 변수 detectAzimuth을 사용하여 방위각 값을 처음으로 가져 왔는지 확인하십시오. 그게 사실이라면 당신이 이미 그것을했다는 것을 의미합니다. hen은 Sharedpreference에서 가져 와서 firstAzimuth에 할당합니다. 그게 당신이 항상 azimuth의 첫 번째 값의 가치를 가지고있을거야.

if (success) { 
    SensorManager.getOrientation(r, v); 
    if (!detectAzimuth) { // if not taken yet 
     azimuth = v[0] * (180/Math.PI); // take the value 
     detectAzimuth = true; //make the bolean true to know that you've taken the value 
     //Store in SharedPreference 
     SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
     editor.putFloat("firstAzimuth", azimuth); 
     editor.commit(); 
    }else{ //if already taken value first time 
     //get the first value from SharedPreference and assign it to firstAzimuth 
     SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
     firstAzimuth = prefs.getFloat("firstAzimuth", 0.0); 
     //take the new value 
     azimuth = v[0] * (180/Math.PI); // take the new value but don't store it 
    } 
    pitch = v[1] * (180/Math.PI); 
    roll = v[2] * (180/Math.PI); 
    } 
} 

희망이 도움이됩니다. 귀하의 정보를 위해서, 귀하가 이미 하나의 가치를 받았을 때 귀하가 더 많은 금액을받지 못하게하고 그 존재 여부를 매번 확인합니다. 네가 원한다면 나는 확신 할 수 없다. 그렇지 않다면 우리는 가능성에 대해 더 논의 할 수 있습니다.

+0

좋은 답변 주셔서 감사합니다. 확실히 당신이 확실하지 않았기 때문에 이것이 내가 목표로했던 것이기 때문에 당신이 방위각 값을 더 얻지 않고 (저장하지 않고) 몇 가지 가능성을 던져 줄 수 있다면 정말 고맙겠습니다. – Uros

+0

도움이 되니 기쁩니다. 괜찮아. 값을 가져 오지 만 저장하지 않으려면 (처음이 아닌 경우) 업데이트 된 코드를 참조하십시오. –

+0

우수! 매력처럼 일하고. 너 규칙. – Uros