4

我正在尝试构建一个允许我同时从多个传感器检索数据的应用程序。我还没有弄清楚我将如何到达那里,所以我开始为结构化布局实现一个 SensorObject 类。

这个传感器对象实现了 SensorEventListener 以及通常的 onaccuracychanged 和 onsensorchanged 方法。由于这个类是继承的,所以我暂时将这两个方法都留空。我还像这样实现了 OnResume 方法:

    public void OnResume() {
    sensorManager.registerListener(this, sensor,
            SensorManager.SENSOR_DELAY_NORMAL);
}

随后,我实现了一个扩展传感器对象的加速度计对象。基本上,它在 onSensor Changed 中做了一些事情。

我的主要问题在这里 1)在活动中,我永远不会从加速度计对象获得结果,因为它只进入'onSensorChanged'方法,直到执行以下代码之后

    AccelerometerObject ao =  new AccelerometerObject(Sensor.TYPE_ACCELEROMETER, this);
    ao.OnResume();

    txtAccelerometerData = (TextView) findViewById(R.id.txtAccelerometerData);
    txtAccelerometerData.setText(ao.toString());

为什么它不立即访问传感器数据,而是按顺序进行?该对象仍然没有值,因为尚未访问 onresume 方法。我需要使用单独的线程吗?效率并不那么重要,我所需要的只是用于实验的有效数据。

2)是否可以使用上述方法实现多个同时传感器?

任何帮助将不胜感激。

以下是所要求的 AccelerometerObject。

public class AccelerometerObject extends SensorObject {

public float[] values;

public AccelerometerObject(int sensorType, Context _Context) {
    super(sensorType, _Context);
}   

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
        }

@Override
public void onSensorChanged(SensorEvent event) {
    AccelerometerValues = event.values;
    onPause();
}


@Override
public String toString() {
    if (values != null) {
        return "X is " + values[0]
                + ", Y is " + values[1]
                + " and Z is "
                + values[2]);
    } else
        return "N/A";
}

}

4

1 回答 1

2

我刚刚在这里上传了一个 Eclipse 项目:http: //cyrixmorten.net/CA-Project.zip

该项目已被用于收集上下文意识课程的数据。

它演示了从

  • 加速度计
  • 陀螺仪
  • 方向
  • 全球定位系统

在实现中,我为每个传感器实现了一个服务。这可能是不必要的复杂,但我们需要在后台继续收集数据,即使不在焦点上也是如此。

编辑:

顺便说一下,所有 *ResultReceiver 对象只是充当 Activity 和它们所代表的 Service 之间的粘合剂。*ResultReceiver 对象接收传感器事件并将它们转换为自定义接口,然后由 MainActivity 使用。

我可以想象那部分可能会导致混乱,但我只是不喜欢在我的活动中弄乱很多不同的捆绑包和字符串,因为我可以通过界面获得准确的值 - 我猜这只是个人保护免受拼写错误的设计选择。

于 2014-04-01T14:22:54.120 回答