【问题标题】:Combining multiple Android Sensors with helper Classes将多个 Android 传感器与帮助程序类相结合
【发布时间】:2014-04-01 13:34:04
【问题描述】:

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

}

【问题讨论】:

  • 我不确定您的实施背后的确切原因。您可以注册所有您想要的传感器并在值更改时接收回调。
  • 我的主要目标是同时从多个传感器检索数据。但是,我似乎有 2 个问题 1)我无法同时检索数据 2)在实现辅助类时(以避免混乱的代码),它仅在执行上述代码后才访问传感器(在文本框中显示信息)
  • 你能展示AccelerometerObject类的完整代码吗?
  • 你在用eclipse开发吗?
  • @Salauyou,代码已上传。

标签: java android android-sensors sensormanager


【解决方案1】:

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

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

它演示了从

获取传感器值
  • 加速度计
  • 陀螺仪
  • 方向
  • 全球定位系统

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

编辑:

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

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

【讨论】:

  • 感谢您的贡献,我会看看并告诉您。
  • 没问题 :) 希望对你有帮助
  • 嗨,我完全放弃了这种方法,并将所有传感器放在一个类中,因为它变得非常复杂,但您的解决方案指出了缺少的内容:1)您的传感器服务,我称之为对象必须扩展我没有做的“服务”。 2) 结果接收者需要相应地传递信息。 3)需要使用处理程序正如我所说,我已经放弃了这种方法,但您的贡献将引导任何人找到正确的答案。因此,我将其标记为答案。谢谢。
  • P.S.为了让所有传感器同时工作,我为每个传感器设置了事件监听器,并在一个单独的线程中执行了一个循环以从每个传感器获取数据并保存。
  • 很高兴听到这个消息,尽管我确实相信 1) 您不需要设置单独的线程来执行此操作,并且 2) 值不应被汇集,而是由传感器推送并抓取通过活动,就像我的示例代码中所做的那样,如果您运行它并按下“训练我”按钮。但是,您可以按照自己的意愿工作,这仍然是这里的目标:) 快乐编码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多