2016-04-03 9 views
12

Я разрабатываю приложение для Android Wear. Он прослушивает координаты с датчика акселерометра и находит шаблон.Датчик акселерометра вызывает потери в работе

Для этого, когда пользователь нажимает кнопку, начинается сервис и начинается сохранение координат в списке. Обычно датчик акселерометра регистрирует от 4 до 5 координат в секунду.

Проблема Иногда метод onSensorChanged() не получает данные в течение нескольких секунд, что приводит к потере данных и проблемам для поиска шаблона.

Вот суть моей службы: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07

Вещи, которые я пробовал:

  • Я использую андроида: stopWithTask = ложь для предотвращения остановки службы, когда активность умирает.
  • Я также использовал WakeLock, чтобы устройство не спало, пока службы записывают координаты.

Что я делаю неправильно? Есть ли другой способ получить обратные вызовы от датчика акселерометра, не вызывая потери данных?

Заранее спасибо.

+0

Вы пытались использовать другую константу 'SensorManager.SENSOR_DELAY_ *'? Любое влияние на проблему? – String

ответ

0

Его немного поздно, но finnaly я нашел решение.

Я запускаю услугу на переднем плане, с методом startForeground(int, Notification), поэтому служба никогда не останавливается. С этим исправлением вы никогда не потеряете SensorEvent.

0

Что вы можете сделать, это записать данные в файл на устройство и прочитать его из файла.

// 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 
    } 
}