KitKat 引入了传感器批处理,但我无法在批处理模式下从传感器读取数据。
我的代码:
public class MainActivity extends AppCompatActivity implements SensorEventListener{
private SensorManager senSensorManager;
private Sensor senAccelerometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
senSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
senAccelerometer = senSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
}
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
Log.d("myApp", "x = " + sensorEvent.values[0]);
}
@Override
public void onAccuracyChanged(Sensor sensor, int i) {
}
protected void onPause() {
super.onPause();
senSensorManager.unregisterListener(this);
}
protected void onResume() {
super.onResume();
int maxReportLatencyUs = 1000000; //1sec
int sampleRate = 20; //20hz
boolean batchMode = senSensorManager.registerListener(this, senAccelerometer, Math.round(1000f/sampleRate)*1000,maxReportLatencyUs);
Log.d("myApp", "batchMode = " + batchMode + " getFifo = " + senAccelerometer.getFifoReservedEventCount());
}
}
日志:
12-06 16:41:51.871 16530-16530/ai.myapplication D/myApp: batchMode = true getFifo = 10000
12-06 16:41:52.000 16530-16530/ai.myapplication D/myApp: x = 0.18681335
12-06 16:41:52.070 16530-16530/ai.myapplication D/myApp: x =1.0407257
12-06 16:41:52.141 16530-16530/ai.myapplication D/myApp: x = 1.3413391
12-06 16:41:52.176 16530-16530/ai.myapplication D/myApp: x = 0.85072327
12-06 16:41:52.212 16530-16530/ai.myapplication D/myApp: x =-0.5851135
12-06 16:41:52.282 16530-16530/ai.myapplication D/myApp: x = 0.73765564
12-06 16:41:52.317 16530-16530/ai.myapplication D/myApp: x = -1.6987457
12-06 16:41:52.387 16530-16530/ai.myapplication D/myApp: x =-0.16067505
12-06 16:41:52.422 16530-16530/ai.myapplication D/myApp: x = 0.14190674
12-06 16:41:52.493 16530-16530/ai.myapplication D/myApp: x = 0.26727295
12-06 16:41:52.528 16530-16530/ai.myapplication D/myApp: x =0.09738159
12-06 16:41:52.599 16530-16530/ai.myapplication D/myApp: x = 0.1519928
12-06 16:41:52.634 16530-16530/ai.myapplication D/myApp: x = 0.18717957
12-06 16:41:52.669 16530-16530/ai.myapplication D/myApp: x =0.15489197
12-06 16:41:52.739 16530-16530/ai.myapplication D/myApp: x = 0.13951111
12-06 16:41:52.776 16530-16530/ai.myapplication D/myApp: x = 0.1558075
12-06 16:41:52.846 16530-16530/ai.myapplication D/myApp: x =0.14822388
12-06 16:41:52.880 16530-16530/ai.myapplication D/myApp: x = 0.16821289
12-06 16:41:52.952 16530-16530/ai.myapplication D/myApp: x = 0.11381531
12-06 16:41:52.986 16530-16530/ai.myapplication D/myApp: x =0.1874237
我希望在每秒钟结束时收到 20 个事件,而不是每 0.05 秒 1 个事件
根据传感器批处理
当 max_report_latency_ns>0 时,传感器事件不需要一检测到就上报。只要没有事件延迟超过 max_report_latency_ns 纳秒,它们就可以暂时存储在硬件 FIFO 中并分批报告。也就是说,自上一批次以来的所有事件都会被记录并立即返回。这减少了发送到 SoC 的中断数量,并允许 SoC 在传感器捕获和批处理数据时切换到低功耗模式(空闲)。
请帮忙
谢谢