Android 我必须在SensorManager类中精确调用unregisterListerner吗?

Android 我必须在SensorManager类中精确调用unregisterListerner吗?,android,sensors,Android,Sensors,在我的代码中,我必须在SensorManager类中调用unregisterListerner以停止暂停活动状态下的抖动检测吗?因为当我没有注销传感器事件时,震动检测仍会发生?如果是这样,为什么registerListener在暂停状态下工作,即使我不调用它 非常感谢 public class MainActivity extends Activity implements SensorEventListener { public SensorManager sensor; public Se

在我的代码中,我必须在SensorManager类中调用unregisterListerner以停止暂停活动状态下的抖动检测吗?因为当我没有注销传感器事件时,震动检测仍会发生?如果是这样,为什么registerListener在暂停状态下工作,即使我不调用它

非常感谢

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?
}

}

是的,您需要注销它才能停止。如果没有,则假定您继续需要更新,即使不在前台