Question

I developed a Data collector which collects data from Accelerometer, Gyroscope, Magnetometer and it worked fine for a while. Then I added Linear Acceleration to it as well (After 4 months, this week). Now both the version are behaving very strangely. Sometime they log the data perfectly when I do some physical activities like walking etc. However, sometimes it doesn't update sensors values and just repeat old values i.e each sensor value is updated lets after 5 seconds, 2 sec etc randomly and I need a sampling rate of 50 samples per second. I experimented with 10-15 participants and all my data was invalid because of this. The strange things is that the same app has worked perfectly before. I can't find any problem in it. I am placing some of the snapshots here. May be if someone can point to any bug or something ?

The buffered Writter:

FileWriter fow;
    BufferedWriter bow;

extfile = new File(extfilepath, message + ".csv");
                    fow = new FileWriter(extfile);
                    bow = new BufferedWriter(fow);  

This bow.writer is then being used in timertask thread to log data every 20 milliseconds.

Can anyone please comment or help me with this ? This weird behavior of this app is beyond my understanding.

Was it helpful?

Solution

Check that you have a wake lock acquired if your application goes to background. I've used PowerManager.PARTIAL_WAKE_LOCK successfully in a data collection application.

When your display turns off, your application is at least paused (and system might even stop it). The partial wake lock "Ensures that the CPU is running; the screen and keyboard backlight will be allowed to go off." So reading between the lines it means that otherwise your CPU might go to sleep for small periods of time in order to save power.

OTHER TIPS

Did you forget to paste in: else if (event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION){} ? Are you using the accelerometer data, then subtracting gravity?

OK. What's your code look like to call the timer?? Something like this?

    Timer updateTimer = new Timer("linear accel");
    updateTimer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            updateGUI();
        }
    }, 0, 100);
}

private void updateGUI() {
    runOnUiThread(new Runnable() {
        public void run() {} } ?
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top