Dou*_*hen 6 android sensor android-sensors
通过引入类范围静态计数器并且忽略了x个事件,我能够解决我遇到的具体问题.但是我仍然想知道我做错了什么:用微秒的提示注册监听器而不是使用四个给定常量中的一个.
我的应用程序中的一项活动是让传感器参与获取设备的方向,确定滚动并使用它.
我在用
SensorManager.registerListener(SensorEventListener listener, Sensor sensor, int rate)
注册我的传感器.从Android文档获取此方法:
参数
[...]
率
速率传感器事件在.这只是对系统的暗示.可以比指定的速率更快或更慢地接收事件.通常会更快地收到事件.该值必须是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME或SENSOR_DELAY_FASTEST之一,或者是事件之间所需的延迟(以微秒为单位).
如果我使用4个预定义常量之一,那么应用程序工作正常; 但是这些常量都提供了对我的需求来说太快的速率提示.我必须发送一个UDP数据包,其中包含每个事件更改的一些信息,并且接收端似乎完全被使用任何预定义速率的消息所淹没.使用像30000这样的整数(因为API指定以微秒为单位的数量)会导致应用程序停止一起报告传感器事件.
我错过了什么阻止我使用自己的事件率提示?
我很确定传感器监听率做了它应该做的事情。在你的问题中你写了30000,即30毫秒。在文档中,它说速度通常比提示快。所以你的速度快于 30 毫秒。是否有可能您的其他网络相关例程进展得太快?它可能导致了一些阻塞,导致您相信传感器报告已停止。
在我的应用程序中,我也发现给定的正常率太高。因此,我将比率设置为 250000。我还使用移动平均计算将数字平滑 5。我发现结果行为接近 iPhone 指南针。
尽管如此,我不建议您在传感器侦听器中进行网络报告。不应该这样做。但是,您可以在侦听器中进行一些简单的计算并记录该值。然后,使用像高数字这样的计时器Handler.postDelayed来处理网络发送等。
| 归档时间: |
|
| 查看次数: |
4060 次 |
| 最近记录: |