2014-03-02 2 views
0

내 코드에서 일시 중지 된 활동 상태에서 흔들기 감지를 중지하려면 SensorManager 클래스에서 unregisterListerner를 명시 적으로 호출해야합니까? 센서 이벤트 등록을 취소하지 않아도 흔들림 감지가 여전히 발생합니까? 그렇다면 registerListener가 호출하지 않아도 일시 중지 상태로 작동하는 이유는 무엇입니까?SensorManager 클래스에서 unregisterListerner를 명시 적으로 호출해야합니까?

고마워요.

public class MainActivity extends Activity implements SensorEventListener { 

public SensorManager sensor; 
public Sensor gravity; 
    private float mAccel; // acceleration apart from gravity 
    private float mAccelCurrent; // current acceleration including gravity 
    private float mAccelLast; // last acceleration including gravity 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    sensor= (SensorManager) this.getSystemService(SENSOR_SERVICE); 
    gravity = sensor.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); 
} 

@Override 
public void onSensorChanged(SensorEvent event) { 
    Float x = event.values[0]; 
    Float y = event.values[1]; 
    Float z = event.values[2]; 
    mAccelLast = mAccelCurrent; 
    mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z)); 
    float delta = mAccelCurrent - mAccelLast; 
      mAccel = mAccel * 0.9f + delta; // perform low-cut filter 
     if (mAccel > 5) { 
     Log.d("sensor", "shake detected w/ speed: "); 
     Toast.makeText(this, "shake detected w/ speed: " + mAccel, Toast.LENGTH_SHORT).show(); 
     } 
     } 

@Override 
protected void onResume() { 
    super.onResume(); 
    sensor.registerListener(this, gravity, SensorManager.SENSOR_DELAY_NORMAL); 
    Log.d("state", "Phone is resumed"); 

} 
@Override 
protected void onPause() { 
    // TODO Auto-generated method stub 
    super.onPause(); 

    Log.d("state", "Phone is paused"); 
// sensor.unregisterListener(this, gravity); Must I call this one to unregister the shaking in paused state? 
} 

은}

답변

2

예, 당신은 그것을 중지하도록 등록을 취소해야합니다. 그렇지 않으면 포 그라운드가 아닌 경우에도 업데이트가 계속 필요하다고 가정합니다.

관련 문제