Я пишу Android Приложение, которое автоматически записывает акселерометр за короткий промежуток времени (10 - 20 секунд), а затем обрабатывает и анализирует записанные данные. Я знаю, как использовать SensorEventListener для извлечения данных из акселерометра, но я не знаю, как автоматически отменить регистрацию прослушивателя после временного интервала, так как onSensorChanged может работать в другом потоке, и я, по-видимому, не могу их создать (я не очень знаком с многопоточное программирование), так как мне нужно только записать только для такого количества из них, а затем передать их напрямую в функцию анализа.
Любой может помочь мне в этом. Вот простой код, который я написал до сих пор (извините, так как я не могу показать полный код, так как некоторые части не мои):
import android.hardware.SensorManager;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.Sensor;
/*... Other Imports ...*/
public class AccelerometerTask implements SensorEventListener {
private ArrayList<float[]> accList; //Store accelerometers data
private ArrayList<Long> timestamps; //Store timestamps
/*... Other Attributes ...*/
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) {
accList.add(event.values);
timestamps.add(event.timestamp);
}
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
/*... unrelated code ...*/
public void collectAndAnalyzeInputs() {
accList = new ArrayList<float[]>();
timestamps = new ArrayList<Long>();
SensorManager sensorManager = service.getSystemService(Context.SENSOR_SERVICE);
sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), sensorManager.SENSOR_DELAY_NORMAL);
Thread.sleep(10000);
sensorManager.unregisterListener(this);
analyze(accList, timestamps);
}
}
Итак, я попытался запустить приведенный выше код, но программа не получила никаких данных от датчиков (при разборе функции анализа список пуст)). Я просто один, чтобы приостановить программу на несколько секунд, чтобы функция onSensorChanged могла записать некоторые данные и затем перейти к анализу. Может ли кто-нибудь помочь мне с этим?
Кроме того, я знаю, что обычно люди регистрируют слушателя, когда программа запускается, и отменяют регистрацию, когда она выключена, но это будет конфликтовать с другими частями приложения (этот класс может использоваться в качестве фонового потока).