2013-06-27 62 views
3

我是新来的android编程。我需要开发一个应用程序,以0.05秒的采样时间从陀螺仪读取数据。我需要每0.05秒获取一次数据。需要阅读固定采样率的android传感器

我看着android的传感器管理器,它给出了四种不同类型的采样率,但它们并不统一。

+0

那么你如何记录所有时间,并删除那些你不需要的时间 – Gina

回答

4

您正在开发哪些API?由于API 11您还可以指定从传感器获取结果的延迟时间。

SensorManager.SENSOR_DELAY_NORMAL(200000个microseceonds延迟)(默认值) SensorManager.SENSOR_DELAY_GAME(20000微秒延迟) SensorManager.SENSOR_DELAY_UI(60000微秒延迟) :Usualy,传感器将与四个固定延迟来注册SensorManager.SENSOR_DELAY_FASTEST(0微秒延迟)如下

传感器将被注册:

mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL); 

所以如果你是从高达11 API开发,您可以注册

mSensorManager.registerListener(this, mSensor, 50000); 

如果没有,比it's会很难,你不容获得的结果每0.05秒,但你可以通过设置SENSOR_DELAY_UI得到的结果为每0.06秒。 另一种可能性是设置SENSOR_DELAY_FASTEST和计数到50000的东西,如

private int value = 0: 

每onSensorChanged()事件

value++; 

,直到你达到50000。但是,这不是很好的做法,作为传感器只有在他能够做到的情况下才能开火如果系统繁忙,则无法保证传感器每次都会发射。

+1

或者你可以记录你上一次读取的值,并检查每个新值,如果延迟大于期望延迟,并不完美,但比使用最快的延迟和计数更精确。 – AxelH

+0

是的,也是一种可能的方法... – Opiatefuchs

0

从API 19(2013+)开始,有一个注册API的新变种,您可以在什么时间间隔提及您希望接收传感器读数。从该文档:

布尔registerListener(SensorEventListener听者, 传感器传感器, INT samplingPeriodUs, INT maxReportLatencyUs)注册一个SensorEventListener用于在给定的取样频率 给定的传感器和所述给定的最大报告延迟。

该函数与registerListener(SensorEventListener, Sensor,int)类似,但它允许事件在传递之前临时保留在硬件 FIFO(队列)中。这些事件可以存储在硬件FIFO中的 maxReportLatencyUs微秒。一旦需要报告FIFO中的一个 事件,将按顺序报告FIFO 中的所有事件。这意味着某些事件将在最大报告延迟时间到达之前报告为 。

相关问题