1

在我的活动中,我使用“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 来完成,但我不确定。

谢谢。

4

2 回答 2

1

你有几个选择:

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

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

  3. 通过使用此处android:screenOrientation描述的方式完全为您的应用程序禁用方向更改,但我真的不建议这样做,除非您希望您的应用程序仅在某个方向上工作的其他原因。

于 2012-01-21T20:21:48.703 回答
0

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

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

如果您希望即使在应用程序处于后台或应用程序终止后仍继续读取传感器数据,一种更强大的方法是使用服务并在应用程序运行时与您的活动来回传递数据跑步。

于 2012-01-21T20:07:51.787 回答