如何在屏幕方向更改期间处理传感器监控?

时间:2012-01-21 20:00:11

标签: android android-sensors

在我的活动中,我使用“onSensorChanged”方法监控传感器。

当按下该活动中的按钮时,我开始监视传感器(在“onClick”方法中)。

我在onPause和onResume方法中注册和取消注册。

以下是代码:

public void onCreate(Bundle savedInstanceState) {
  //Here i set "mySensor"
}

public void onClick(View view){
  sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST);
}

protected void onPause() {
  sensorManager.unregisterListener(this, mySensor);
}

protected void onResume() {
  sensorManager.registerListener(this, mySensor, SensorManager.SENSOR_DELAY_FASTEST);
}

public final void onSensorChanged(SensorEvent event) {
  //do things
}

问题是,当屏幕方向改变时,监视停止,我在“onSensorChanged”内所做的事情停止,直到我再次按下按钮。

我一直在阅读,似乎当屏幕方向改变时,我的活动被破坏并重新创建,但我希望传感器的监控不会在此过程中停止。

我如何保持监控?我认为必须使用Bundle,但我不确定。

感谢名单。

2 个答案:

答案 0 :(得分:1)

您有几个选择:

  1. 您可以将传感器侦听器移动到应用程序类中,该应用程序类由清单中android:name中的<application>定义。请参阅here,命名您从android.app.Application派生的课程。我会推荐这种方法。

  2. 您可以将android:configChanges="orientation"添加到活动清单中,但正如here所述,您需要在{{{{}}中处理相应资源的重新加载,例如特定方向布局。 1}你的活动。我不建议这样做,因为当其他配置发生更改时您仍然会遇到监视问题,或者您需要弄清楚应用程序应该如何处理它们(并将它们添加到{{1}中的更改列表中})。

  3. 按照here所述,使用onConfigurationChanged()完全取消了对您的应用的定位更改,但我真的不建议这样做,除非您有其他原因要求您的应用只能在某种方向。

答案 1 :(得分:0)

事实上,当设备的方向发生变化时,Android上的活动会被破坏并重新创建。如果您不关心所有方向,您可以将活动“限制”为单一方向。

或者,如果您希望为多个方向(默认)提供支持,您可以将传感器读取部分移动到静态单例(您可以从您想要的任何活动中调用)到子类中。可以使用getApplication()调用的应用程序类或由Application类的子类引用的单独类 - 有关Application类的更多信息,请阅读this。所有这三种选择都是相当不错的选择,可以在整个活动中保持全球状态。

一种更健壮的方法,如果您希望在应用程序在后台或应用程序终止后继续读取传感器数据,则使用服务并在您的活动中来回传递数据该应用正在运行。