2013-01-21 1 views
1

다음은 어떤 조건에 해당 될 때 내 안드로이드 휴대 전화를 진동시키기위한 코드입니다. 방위각 (자력계로부터 얻는)이 주어진 범위 내에 있지 않을 때까지 진동해야합니다.안드로이드 모바일의 자력계 센서로 방향을 얻으십시오

하지만 휴대 전화를 가리키는 방향에 상관없이 결코 진동하지 않습니다. if 문을 입력하지만 while 문은 입력하지 않습니다. 진동 기능이 작동 중입니다 (예 : 휴대 전화가 고장났습니다). 내 목적은 남동쪽 서쪽 북쪽을 찾는 것입니다.

내가 뭘 잘못하고 있니?

public void onCreate(Bundle savedInstanceState) { 
    // some code   
    mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
    if (mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD) != null){ 
     // Success! There's a magnetometer. 
     Toast.makeText(
      getApplicationContext(), 
      "Detecting magnetic field", 
      Toast.LENGTH_LONG).show(); 
     speakOut("not Working"); 
    } 
    else { 
     Toast.makeText(
      getApplicationContext(), 
      "not working", 
      Toast.LENGTH_LONG).show(); 
     speakOut("not Working"); 
    } 
    // some code that calls the function 
} 

some_function(){ 
    if (//some condition) { 
     while (!(85 < azimuth_angle) && !(azimuth_angle < 95)) { 
      viberator.vibrate(1000); 
      //this should happen when it faces east. 
     } 
    } 
} 

public void onSensorChanged(SensorEvent event) { 
    // TODO: Auto-generated method stub 
    azimuth_angle = event.values[0]; 
    pitch_angle = event.values[1]; 
    roll_angle = event.values[2]; 
} 

답변

1

방위각은 나침반의 방향이 아니다. 나침반 센서 용으로 작성한 코드가 있습니다. 그것은 100 %가 아닙니다 (더 좋은 필터가 필요합니다. 쓸 시간이나 이유가 없습니다). 그러나 그것은 방향을 얻는 논리를 보여줍니다. 반환 값을 더 잘 필터링하는 작업을 할 수 있습니다.

Answer to previous question where I posted my code