Я изучаю основы программирования на Android.
У меня есть простое приложение для тестирования Android, в котором я записываю акселерометр, магнитометр и данные об ориентации во внешний файл, а также отображаю его. Я запускаю процесс регистрации нажатием кнопки Start (registerListener для соответствующих датчиков), вызывая метод initLogger .
Что выглядит примерно так ...
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 обработчик, который должен извлечь данные из соответствующих датчиков, установить значение для соответствующих элементов пользовательского интерфейса и, наконец, записать данные во внешний файл .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 ....
Хотя я получаю данные от всех сконфигурированных датчиков, у меня нет контроля над скоростью, с которой данные принимаются. то есть
Я знаю, что событие SensorChanged происходит, как и когда данные датчика изменяются. Однако я хочу, чтобы это событие было проведено с фиксированной скоростью. Например: каждые 40 мс
Вопрос:
Эксперты здесь, в SO.Пожалуйста, помогите мне:)