【问题标题】:Multi-Sensor Android Logging多传感器 Android 日志记录
【发布时间】:2017-05-10 06:51:56
【问题描述】:

我是 Android 新手,我尝试做一个简单的应用程序,可以将加速度计、陀螺仪和 GPS 记录到单个 csv 文件(背景)中,以便以后分析数据。在谷歌中进行了一些挖掘之后,我得到的所有信息都有些陈旧,有些并没有真正起作用。

所以,问题是:

  1. 如果我像 https://stackoverflow.com/a/4343827/2985850 这样在 UI 线程中完成所有任务,我想知道每个传感器记录之间是否存在延迟?因为我希望所有传感器以相同的采样率同时运行。

  2. 到目前为止,我注意到有两种方法可以做到这一点:使用多线程或服务。但是,(如果我错了,请纠正我)该服务也在 UI 线程上运行,这意味着如果我以服务方式执行此操作,则日志记录过程也会在单个线程中运行,这可能会导致日志记录过程出现一些延迟每个传感器之间?

如果有更好的方法来完成此操作或任何好的示例,请随时将它们放在这里谢谢! :)

【问题讨论】:

    标签: android multithreading accelerometer gyroscope android-gps


    【解决方案1】:

    根据我的经验,我会尽力回答你的问题

    1. 是的,不同传感器读数之间存在时间差,在这种情况下,您有 2 个选项

      a - 你也可以在你的 cvs 文件上加上一个时间戳(你可以通过 event.timestamp 得到它)

      b - 您可以使用静态频率而不是 SensorManager.SENSOR_DELAY_GAME 获取传感器读数(您可以在此处以毫秒为单位给出时间,例如,如果您写 10 而不是 SensorManager.SENSOR_DELAY_GAME,则您的设备每 10 毫秒(100Hz)获取传感器读数))

    2. 我也将其用作服务,没有任何延迟

    另外我想补充一点,如果你想在短时间内获取数据,你可以随时使用 System.out.println(),它比写入文件更快

    【讨论】:

    • 如果我把它作为时间戳是不是每次读取之间仍然有时间差?我想要它,比如说时间 A,时间 A 的 3 个不同传感器读数。
    • 关于服务的另一个问题,在我的主要活动中,我需要像 startService(xxx) 一样启动它。那么,如果我一个一个地为 3 个传感器启动服务,是不是 loader 会在第一个服务完成之前将 rest 放在队列中?
    • 您可以在一个类中启动所有服务,而无需为每个服务创建服务类。只需在这个 sensorService 类中注册所有三个传感器。
    • 正如你所说,你会得到它们之间的时间差,但你可以对它们进行插值,或者正如我建议的那样,你可以获得静态频率的传感器读数(但在这种情况下,有时可能会出现小的时间间隔,但都是ms级别的,影响不大)
    • 就我而言,所有的时间间隔都非常敏感...我需要将陀螺仪和加速度计结合起来,并在汽车行驶时获得每个位置的振动
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多