Ответ 1
Его немного поздно, но finnaly я нашел решение.
Я запускаю службу на переднем плане с помощью метода startForeground(int, Notification)
, поэтому служба никогда не останавливается. С этим исправлением вы никогда не потеряете SensorEvent.
Я разрабатываю приложение для Android Wear. Он прослушивает координаты с датчика акселерометра и находит шаблон.
Для этого, когда пользователь нажимает кнопку, служба запускает и начинает сохранять координаты в списке. Обычно датчик акселерометра регистрирует от 4 до 5 координат в секунду.
Иногда проблема заключается в том, что метод onSensorChanged() не получает данные в течение нескольких секунд, вызывая потери данных и проблемы, чтобы найти шаблон.
Вот суть моей службы: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07
Вещи, которые я пробовал:
Что я делаю неправильно? Есть ли другой способ получить обратные вызовы от датчика акселерометра, не вызывая потери данных?
Спасибо заранее.
Его немного поздно, но finnaly я нашел решение.
Я запускаю службу на переднем плане с помощью метода startForeground(int, Notification)
, поэтому служба никогда не останавливается. С этим исправлением вы никогда не потеряете SensorEvent.
Что вы можете сделать, так это записать данные в файл на устройстве и прочитать его из файла.
// When sensor value has changed
@Override
public void onSensorChanged(SensorEvent event){
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
//Perform a background task to store the data
new SensorEventLoggerTask().execute(event);
// And continue to do whatever you want and grab the data
// The data will be saved in to a file on the device and read it from themre
}
}