将多个Android Sensors与帮助程序类组合在一起

时间:2014-04-01 13:34:04

标签: java android android-sensors sensormanager

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

这个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";
}

}

1 个答案:

答案 0 :(得分:2)

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

该项目已被用于收集Context Awareness课程的数据。

它演示了从

获取传感器值
  • 加速度计
  • 陀螺
  • 取向
  • GPS

在实施中,我为每个传感器实施了一项服务。这可能是不必要的复杂,但我们需要数据收集在后台继续,即使没有聚焦。

编辑:

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

我可以想象那部分可能会导致混乱,但我只是不喜欢在我的活动中弄乱很多不同的Bundles和Strings,因为我可以通过界面获得准确的值 - 只是个人防范错别字的设计选择我猜测。