Android - 如何以批处理模式接收传感器数据?

2023-12-25

奇巧推出传感器批处理 https://source.android.com/devices/sensors/batching.html,但我无法在批处理模式下从传感器读取数据。

My code:

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());

    }
}

Logs:

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 个事件

根据传感器批处理 https://source.android.com/devices/sensors/batching.html

当max_report_latency_ns>0时,传感器事件不需要上报 一旦被发现。它们可以暂时存储在 硬件 FIFO 并批量报告,只要没有事件延迟 超过 max_report_latency_ns 纳秒。也就是说,所有事件 因为上一批是立即记录并返回的。这 减少发送到 SoC 的中断量,并允许 SoC 当传感器捕获时切换到较低功耗模式(空闲) 批处理数据。

请帮忙

Thanks


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android - 如何以批处理模式接收传感器数据? 的相关文章

随机推荐