不断监测Android中的传感器

7
我正在尝试找出以小于0.25毫秒的轮询速率监测加速度计传感器的最佳方法。我已经为用户实现了一个UI选项,使其可以切换到常态监测状态,并清楚地说明了电池耗尽的后果。由于Android处理内存和线程的方式,远程服务是否比守护线程更好?重点是让加速度计尽可能接近持续监测,无论电池消耗如何。这种监测需要长时间运行,甚至可能连续超过24小时,我也意识到了功耗后果。感谢任何建议、阅读或代码片段。
只是一个新手,希望从Android社区的智慧中寻求建议。提前感谢您,
-Steve 澄清:我正在尝试检测加速度变化的瞬间。我的代码通过轴进行区分,但我要实现的目标是获取实时数据。

Android上的加速度计是一个传感器。它推送数据,你无法合理地从中提取数值。 - Blitz
@LordT - 重新阅读后我意识到可以表述得更好。我正在使用自定义的监听器接口来接收加速传感器的更新。谢谢您指出这一点。 - Kingsolmn
哦,好的,这样更有意义。就像说的那样,我会为此使用一个服务 - 使用远程服务将允许您在后台安全运行。 - Blitz
Steve - 你从长时间运行的加速度计事件监测中学到了什么?它消耗了多少电量?在不同设备之间有很大的差异吗? - brunobowden
@brunobowden 我能够找到一个解决方案,在监测了超过24小时后没有显著影响电池/CPU/发热。该解决方案似乎具有相同的好处,无论设备/操作系统版本如何。不幸的是,我提出的解决方案是专有的,但我是基于SO上其他基于加速度计的问题得出这个解决方案的。至于功耗,请尝试https://dev59.com/gW435IYBdhLWcg3w7k6b#5177427 - Kingsolmn
2个回答

2

尽管海报对电池耗尽不感兴趣,但我有点好奇 - 它有多糟糕? - Demiurg
我不记得确切的数字了,但对于我们的完整设置,我们从G1中获得了大约10个小时(那时候是这样的:)- 但是,那是在> 300Hz上压缩心率和其他数字并通过蓝牙传输。我认为仅使用加速度计,我们可以获得超过16个小时的使用时间。 - Blitz
1
设备休眠怎么办?一旦设备进入睡眠状态并关闭那些传感器,您将不会收到任何传感器更新。您是否一直保持唤醒锁定状态运行? - MikeL

1
使用特定的线程来监视和等待是最好的解决方案,可以灵活地控制等待时间。这种方法非常高效,因为它不需要任何特定的服务。
class MonitorThread extends Thread {
    ...
    public void run() {
        for (;;) {
            long ms = 0;
            int nanos = 250000;
            ... // Do something or compute next delay to wait
            try {
                Thread.sleep(ms, nanos);
            } catch (InterruptedException ex) {
            }
        }
    }
}

查看http://developer.android.com/reference/java/lang/Thread.html

您可以指定非常短的延迟(.250毫秒),因此这将占用CPU资源。 您可能可以使用加速度计的结果来增加或减少此延迟。 例如,如果检测到没有加速度,则增加延迟(由您决定,但100毫秒似乎合理甚至更高)。 一旦检测到某些东西,就减少延迟。所有这些都取决于您的应用程序。


在安卓上,如果你真的需要这个,我会非常推荐使用一个 Handler! - Blitz
@ciceron- 我正在尝试检测加速度发生变化的瞬间。我的代码按轴区分,但从加速度计获取实时数据是目标。感谢您建议使用加速度数据来控制睡眠间隔,好主意! - Kingsolmn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接