我正在学习 Android 编程基础知识。
我有一个简单的 android 测试应用程序,在其中我将加速度计、磁力计和方向数据记录到外部文件,同时也显示它。我通过调用方法initLogger单击开始按钮(相关传感器的 registerListener)启动日志记录过程。
看起来与此类似...
public void initLogger(View view)
{
boolean bFlag = false;
Button btnStart = (Button)findViewById(R.id.btnStartLog);
Button btnStop = (Button)findViewById(R.id.btnStopLog);
btnStart.setEnabled(bFlag);
btnStop.setEnabled(!bFlag);
bEnableLogging = true;
//Start reading the sensor values
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_UI);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_UI);
//so on....
还有一个停止按钮,它将停止记录过程(最后通过为每个传感器调用 unregisterListener 来取消注册)
数据检索过程发生在onSensorChanged处理程序内部,该处理程序应从相关传感器检索数据,将值设置为相应的 UI 元素,最后将数据记录到外部 .csv 文件中。
onSensorChanged事件处理程序看起来像这样......
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
// accelerometer
TextView tAX = (TextView) findViewById(R.id.txtViewAxValue);
TextView tAY = (TextView) findViewById(R.id.txtViewAyValue);
TextView tAZ = (TextView) findViewById(R.id.txtViewAzValue);
// magnetic field
TextView tMX = (TextView) findViewById(R.id.txtViewMx);
TextView tMY = (TextView) findViewById(R.id.txtViewMy);
TextView tMZ = (TextView) findViewById(R.id.txtViewMz);
if (bEnableLogging) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accelerometerdata = event.values.clone();
tAX.setText(Double.toString(accelerometerdata[0]));
tAY.setText(Double.toString(accelerometerdata[1]));
tAZ.setText(Double.toString(accelerometerdata[2]));
}
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
magneticmatrixdata = event.values.clone();
tMX.setText(Double.toString(magneticmatrixdata[0]));
tMY.setText(Double.toString(magneticmatrixdata[1]));
tMZ.setText(Double.toString(magneticmatrixdata[2]));
}
// so on ....
虽然我从所有配置的传感器接收数据,但我无法控制接收数据的速率。IE
我知道 SensorChanged 事件是在传感器数据更改时触发的。但是,我希望以固定的速率触发此事件。例如:每 40 毫秒
问题:
- 如何确保 SensorChanged 事件以恒定速率触发?
- 在这种情况下,Java 中的 TimerTask 类有什么帮助吗?
SO的专家在这里。请帮助我:)