我是新来的android编程。我需要开发一个应用程序,以0.05秒的采样时间从陀螺仪读取数据。我需要每0.05秒获取一次数据。需要阅读固定采样率的android传感器
我看着android的传感器管理器,它给出了四种不同类型的采样率,但它们并不统一。
我是新来的android编程。我需要开发一个应用程序,以0.05秒的采样时间从陀螺仪读取数据。我需要每0.05秒获取一次数据。需要阅读固定采样率的android传感器
我看着android的传感器管理器,它给出了四种不同类型的采样率,但它们并不统一。
您正在开发哪些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。但是,这不是很好的做法,作为传感器只有在他能够做到的情况下才能开火如果系统繁忙,则无法保证传感器每次都会发射。
或者你可以记录你上一次读取的值,并检查每个新值,如果延迟大于期望延迟,并不完美,但比使用最快的延迟和计数更精确。 – AxelH
是的,也是一种可能的方法... – Opiatefuchs
活动可接收大于指定速率
更快或更慢从https://developer.android.com/reference/android/hardware/SensorManager.html
事件可以接收比指定的速率更快或更慢。通常事件收到更快。可以是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST之一或延迟(以微秒为单位)。
从API 19(2013+)开始,有一个注册API的新变种,您可以在什么时间间隔提及您希望接收传感器读数。从该文档:
布尔registerListener(SensorEventListener听者, 传感器传感器, INT samplingPeriodUs, INT maxReportLatencyUs)注册一个SensorEventListener用于在给定的取样频率 给定的传感器和所述给定的最大报告延迟。
该函数与registerListener(SensorEventListener, Sensor,int)类似,但它允许事件在传递之前临时保留在硬件 FIFO(队列)中。这些事件可以存储在硬件FIFO中的 maxReportLatencyUs微秒。一旦需要报告FIFO中的一个 事件,将按顺序报告FIFO 中的所有事件。这意味着某些事件将在最大报告延迟时间到达之前报告为 。
那么你如何记录所有时间,并删除那些你不需要的时间 – Gina