Сензорът на акселерометъра причинява загуби при влизане в услуга

Разработвам приложение за Android Wear. Той слуша координати от сензор за акселерометър и намира модел.

За да направите това, когато потребителят щракне върху бутон, услугата се стартира и започва да съхранява координати в списък. Обикновено сензорът на акселерометъра регистрира 4 до 5 координати в секунда.

Проблемът понякога е, че методът onSensorChanged() не получава данни в продължение на няколко секунди, което води до загуба на данни и проблеми при намирането на модел.

Ето същността на моята услуга: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d7941faa0 >

Неща, които съм пробвал:

  • Използвам android:stopWithTask=false, за да попреча на услугата да спре, когато дейността умре.
  • Също така използвах WakeLock, за да предотвратя заспиването на устройството, докато услугите записват координати.

какво правя грешно Има ли друг начин да получавате обратни повиквания от сензора на акселерометъра, без да причинявате загуба на данни?

Благодаря предварително.


person cpalosrejano    schedule 03.04.2016    source източник
comment
Опитвали ли сте да използвате различна константа SensorManager.SENSOR_DELAY_*? Има ли ефект върху проблема?   -  person String    schedule 03.04.2016


Отговори (2)


Малко е късно, но най-накрая намерих решението.

Стартирам услугата на преден план с метод startForeground(int, Notification), така че услугата никога няма да спре. С тази корекция никога няма да загубите SensorEvent.

person cpalosrejano    schedule 27.12.2016

Това, което можете да направите, е да запишете данните във файл на устройството и да ги прочетете от файла.

// 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
    }
}
person CodeWizard    schedule 28.04.2016