我是Android编程新手。我需要开发一个应用程序,它从陀螺仪读取数据,采样时间为0.05秒。我需要每0.05秒获得一个数据。
我研究了android的传感器管理器,它提供了四种不同类型的采样率,但它们并不统一。
答案 0 :(得分:4)
您正在开发哪种API?从API 11开始您还可以指定从传感器获取结果的延迟。通常,传感器将注册四个固定延迟:
SensorManager.SENSOR_DELAY_NORMAL(延迟200000微片)(默认值) SensorManager.SENSOR_DELAY_GAME(延迟20000微秒) SensorManager.SENSOR_DELAY_UI(延迟60000微秒) SensorManager.SENSOR_DELAY_FASTEST(延迟0微秒)
传感器将注册如下:
mSensorManager.registerListener(this, mSensor, SensorManager.SENSOR_DELAY_NORMAL);
因此,如果您从最新的API 11开始,您可以注册
mSensorManager.registerListener(this, mSensor, 50000);
如果不是,那将会很难,你不能每0.05秒获得一次结果,但你可以通过设置SENSOR_DELAY_UI来获得每0,06秒的结果。 另一种可能性是设置SENSOR_DELAY_FASTEST并用
之类的东西计数到50000 private int value = 0:
和每个onSensorChanged()事件
value++;
直到你达到50000.但这不是一个好习惯,因为传感器只是在他可以的情况下发射事件。如果系统处于高电平状态,则无法保证传感器每次都会发射。
答案 1 :(得分:0)
可能比指定的费率更快或更慢地接收事件
来自https://developer.android.com/reference/android/hardware/SensorManager.html
可以比指定的速率更快或更慢地接收事件。通常会更快地收到事件。可以是SENSOR_DELAY_NORMAL,SENSOR_DELAY_UI,SENSOR_DELAY_GAME,SENSOR_DELAY_FASTEST或延迟(以微秒为单位)之一。
答案 2 :(得分:0)
从API 19(2013+)开始,有一个新的注册API变体,您可以在其中提到您希望接收传感器读数的间隔。来自文档:
boolean registerListener(SensorEventListener listener, 传感器传感器 int samplingPeriodUs, int maxReportLatencyUs)在给定的采样中为给定的传感器注册SensorEventListener 频率和给定的最大报告延迟。
此函数类似于registerListener(SensorEventListener, 传感器,int)但它允许事件暂时保留在硬件中 传送前的FIFO(队列)。事件可以存储在 硬件FIFO高达maxReportLatencyUs微秒。曾经的一个 需要报告FIFO中的事件,FIFO中的所有事件 按顺序报告。这意味着一些事件将是 在最大报告延迟时间过去之前报告。