我正在尝试构建一个应用程序,该应用程序允许我同时从多个传感器检索数据。我仍然没有弄清楚我将如何到达那里,所以我首先为结构化布局实现一个 SensorObject 类。
此传感器对象实现 SensorEventListener 以及通常的 onaccuracychanged 和 onsensorchanged 方法。我暂时将这两个方法留空,因为这个类是继承的。我还实现了OnResume方法,如下所示:
public void OnResume() {
sensorManager.registerListener(this, sensor,
SensorManager.SENSOR_DELAY_NORMAL);
}
我依次实现了一个扩展传感器对象的加速度计对象。实质上,它在 onSensor 中做了一些东西 改变.
我的主要问题就在这里1)在活动中,我永远不会从加速度计对象获得结果,因为它只会进入"onSensorChanged"方法,直到执行以下代码之后:
AccelerometerObject ao = new AccelerometerObject(Sensor.TYPE_ACCELEROMETER, this);
ao.OnResume();
txtAccelerometerData = (TextView) findViewById(R.id.txtAccelerometerData);
txtAccelerometerData.setText(ao.toString());
为什么它不立即访问传感器数据,而是按顺序进行?该对象仍然没有值,因为尚未访问 onresume 方法。我是否需要使用单独的线程?效率不是那么重要,我所需要的只是用于实验的有效数据。
2) 是否可以使用上述方法实现多个同步传感器?
任何帮助将不胜感激。
下面是请求的加速计对象。
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";
}
}
我刚刚在这里上传了一个日食项目:http://cyrixmorten.net/CA-Project.zip
该项目已用于收集上下文感知课程的数据。
它演示了从以下位置获取传感器值
- 加速度计
- 陀螺仪
- 取向
- 全球定位系统
在实现中,我为每个传感器实现了服务。这可能过于复杂,但我们需要在后台继续数据收集,即使没有焦点。
编辑:
顺便说一下,所有 *ResultReceiver 对象仅充当活动与它们所表示的服务之间的粘合剂。*ResultReceiver 对象接收传感器事件,并将其转换为自定义接口,然后由 MainActivity 使用。
我可以想象这部分可能会导致混乱,但我只是不喜欢在我的活动中弄乱很多不同的捆绑包和字符串,当我可以通过界面获得确切的值时 - 我猜只是个人保护免受错别字的设计选择。