2016-04-03 8 views
12

Pracuję nad aplikacją pod numerem Android Wear. Wysłuchuje współrzędne z czujnika przyspieszenia i odnajduje wzór.Czujnik przyspieszeniomierza powoduje straty w usłudze

W tym celu, gdy użytkownik kliknie przycisk, usługa rozpoczyna się i rozpoczyna zapisywanie współrzędnych na liście. Zwykle czujnik przyspieszenia rejestruje 4 do 5 współrzędnych na sekundę.

Problem polega czasem na tym, że metoda onSensorChanged() nie odbiera danych przez kilka sekund, powodując utratę danych i problemy z odnalezieniem wzorca.

Oto sedno moich usług: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07

Czego próbowałem:

  • Używam android: stopWithTask = false aby zapobiec usługę, aby zatrzymać kiedy umiera aktywność.
  • Używam również urządzenia typu WakeLock, aby zapobiec przechodzeniu urządzenia w stan uśpienia podczas rejestrowania współrzędnych.

Co robię źle? Czy istnieje inny sposób odbierania wywołań zwrotnych z czujnika przyspieszenia bez powodowania utraty danych?

Z góry dziękuję.

+0

Czy próbowałeś użyć innej stałej 'SensorManager.SENSOR_DELAY_ *'? Jakiś wpływ na problem? – String

Odpowiedz

0

Trochę za późno, ale finnalnie znalazłem rozwiązanie.

Uruchamiam usługę na pierwszym planie, korzystając z metody startForeground(int, Notification), aby usługa nigdy nie przestała działać. Dzięki tej poprawce nigdy nie utracisz SensorEvent.

0

To, co możesz zrobić, to zapisać dane w pliku na urządzeniu i odczytać je z pliku.

// 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 
    } 
} 
Powiązane problemy