2015-06-07 25 views
1

我想利用加速度传感器的最大FIFO大小在Nexus 6利用传感器配料

SensorManager sensorManager = 
       (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
     Sensor sensor = sensorManager.getDefaultSensor(typeAccelerometer); 
     Log.e("test", 
       "Max delay: " + sensor.getMaxDelay() + " - Fifo count" + sensor.getFifoReservedEventCount()); // prints 1000000 (1 second) - Fifo count 10000 

     // Register the listener for this sensor in batch mode. 
     // Following code reports every 190ms when screen is ON, and every 10 seconds when screen is OFF. I always want every 10 seconds. 
     final boolean batchMode = sensorManager.registerListener(
      mListener, sensor, 1000000 /* 1 second */, 10000000 /* 10 seconds */); 

private final SensorEventListener mListener = new SensorEventListener() { 
    long lastTimeStamp; 
    @Override 
    public void onSensorChanged(SensorEvent event) { 
     long current = System.currentTimeMillis(); 
     long time = current - lastTimeStamp; 

     if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
      Log.e("test", 
        "New ACCELERO "+ " -> "+ time + "ms -> " + (int)event.values[0] + " -> "+ (int)event.values[1] +" -> "+ (int)event.values[2]); 
      lastTimeStamp = current; 
     } 
    } 

    @Override 
    public void onAccuracyChanged(Sensor s, int accuracy) { 

    } 
}; 

当屏幕打开,我得到的事件每190ms。但是,当屏幕关闭时,它会服从10秒。

当屏幕处于开启状态时,如何利用完整批处理FIFO(带有延迟侦听器),以最小化CPU影响。

回答

0

上面的代码很好。在Nexus 6上,只要屏幕处于打开状态,加速计就不会进行批处理。所有其他传感器都很好。

-1

sensor.getFifoReservedEventCount()返回它可以存储值的量,我不认为它在毫秒

0

时间当心的第三个参数registerListener的。这是不以秒为像你这样写道:

final boolean batchMode = sensorManager.registerListener(
      mListener, sensor, 1000000 /* WRONG */, 10000000); 

它应该是以下常量之一:

  • SENSOR_DELAY_NORMAL
  • SENSOR_DELAY_UI
  • SENSOR_DELAY_GAME
  • SENSOR_DELAY_FASTEST。

来源:https://developer.android.com/reference/android/hardware/SensorManager.html#registerListener(android.hardware.SensorEventListener,%20android.hardware.Sensor,%20int,%20int)