需要以固定的采样率读取安卓传感器

时间:2013-06-27 07:45:52

标签: android android-sensors

我是Android编程新手。我需要开发一个应用程序,它从陀螺仪读取数据,采样时间为0.05秒。我需要每0.05秒获得一个数据。

我研究了android的传感器管理器,它提供了四种不同类型的采样率,但它们并不统一。

3 个答案:

答案 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中的所有事件   按顺序报告。这意味着一些事件将是   在最大报告延迟时间过去之前报告。