我正在尝试构建一个允许我同时从多个传感器检索数据的应用程序。我还没弄清楚我将如何到达那里,所以我开始为结构化布局实现一个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";
}
}
答案 0 :(得分:2)
我刚刚在这里上传了一个eclipse项目:http://cyrixmorten.net/CA-Project.zip
该项目已被用于收集Context Awareness课程的数据。
它演示了从
获取传感器值在实施中,我为每个传感器实施了一项服务。这可能是不必要的复杂,但我们需要数据收集在后台继续,即使没有聚焦。
编辑:
顺便说一下,所有* ResultReceiver对象仅仅充当它们所代表的Activity和Service之间的粘合剂。 * ResultReceiver对象接收传感器事件并将其转换为自定义界面,然后由MainActivity使用。
我可以想象那部分可能会导致混乱,但我只是不喜欢在我的活动中弄乱很多不同的Bundles和Strings,因为我可以通过界面获得准确的值 - 只是个人防范错别字的设计选择我猜测。