2016-04-03 32 views
12

Sto sviluppando un'applicazione per Android Wear. Ascolta le coordinate di un sensore dell'accelerometro e trova uno schema.Il sensore dell'accelerometro causa perdite durante un servizio

Per fare ciò, quando l'utente fa clic su un pulsante, il servizio inizia e inizia a memorizzare le coordinate in un elenco. Di solito, il sensore dell'accelerometro registra da 4 a 5 coordinate al secondo.

Il problema è che a volte il metodo onSensorChanged() non riceve dati per diversi secondi causando perdite di dati e problemi nel trovare un modello.

Ecco un succo del mio servizio: https://gist.github.com/cpalosrejano/8f0e59e47124275136fc3d5d941faa07

Le cose che ho provato:

  • Sto usando Android: stopWithTask = false per evitare il servizio di fermarsi quando l'attività muore.
  • Ho anche utilizzato un dispositivo WakeLock per impedire che il dispositivo entri in modalità di sospensione mentre i servizi stanno registrando le coordinate.

Cosa sto sbagliando? Esiste un altro modo per ricevere le richiamate dal sensore dell'accelerometro senza causare perdita di dati?

Grazie in anticipo.

+0

Hai provato a utilizzare un diverso 'SensorManager.SENSOR_DELAY_ *' costante? Qualche effetto sul problema? – String

risposta

0

È un po 'in ritardo, ma finalmente ho trovato la soluzione.

Avvio il servizio in primo piano, con il metodo startForeground(int, Notification) in modo che il servizio non si fermi mai. Con questa correzione, non avrai mai perso SensorEvent.

0

Quello che puoi fare è scrivere i dati su un file sul dispositivo e leggerli dal file.

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