Java 将多个Android传感器与助手类相结合

Java 将多个Android传感器与助手类相结合,java,android,android-sensors,sensormanager,Java,Android,Android Sensors,Sensormanager,我正在尝试构建一个应用程序,使我能够同时从多个传感器检索数据。我还没有弄清楚我将如何到达那里,所以我开始为结构化布局实现一个SensorObject类 此sensorobject与常用的onaccuracychanged和onsensorchanged方法一起实现SensorEventListener。由于继承了此类,我暂时将这两个方法保留为空。 我还实现了OnResume方法,如下所示: public void OnResume() { sensorManager.regist

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

此sensorobject与常用的onaccuracychanged和onsensorchanged方法一起实现SensorEventListener。由于继承了此类,我暂时将这两个方法保留为空。 我还实现了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) 是否可以使用上述方法同时实现多个传感器

任何帮助都将不胜感激

下面是要求的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";
}

}

我刚刚在这里上传了一个eclipse项目:

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

它演示了如何从中获取传感器值

  • 加速计
  • 陀螺仪
  • 定向
  • 全球定位系统
在实现中,我为每个传感器实现了一个服务。这可能是不必要的复杂,但我们需要在后台继续收集数据,即使没有重点

编辑:

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


我可以想象这一部分可能会导致混乱,但我只是不喜欢在我的活动中弄乱许多不同的捆绑包和字符串,因为我可以通过界面获得准确的值——我想这只是个人防打字错误的设计选择

我不确定你实施的确切原因。您可以注册所有想要的传感器,并在值更改时接收回调。我的主要目标是同时从多个传感器检索数据。然而,我似乎有两个问题1)我无法同时检索数据2)在实现帮助器类时(为了避免混乱的代码),只有在上述代码执行后才能访问传感器(在文本框中显示信息)您能显示AccelerometerObject类的完整代码吗?您是否使用eclipse进行开发?@Salauyou,代码已上载。感谢您的贡献,我将查看它并让您知道。没问题:)希望它有帮助。嗨,我完全放弃了这种方法,将所有传感器放在一个类中,因为它变得非常复杂,但您的解决方案指出了缺少的内容:1)您的传感器服务,我称之为对象的对象必须扩展我没有做的“服务”。2) 结果接收者需要相应地传递信息。3) 正如我所说,需要使用处理程序,我已经放弃了这种方法,但您的贡献将引导任何人找到正确的答案。因此,我将其标记为答案。谢谢。为了让所有传感器同时工作,我为每个传感器设置了事件监听器,在一个单独的线程中,我做了一个循环,从每个传感器获取数据并保存。很高兴听到这个消息,尽管我确实认为1)不需要设置单独的线程来执行此操作,2)值不应该被合并,而是由传感器推送并由活动捕获,就像我的示例代码中所做的那样,如果您运行它并按下“train me”(训练我)按钮。然而,您可以按照自己的意愿来工作,这就是这里的目标:)快乐编码