Newbie
Newbie

Reputation: 1

What is the Android Codes to record accelerometer data in millisecond?

I am doing a project that have to record the accelerometer data in a logged file. Can anyone help me with the following codes? What is the android codes that should add in the following codes in order to record accelerometer data? I may hope to get the data every 10millisecond. Any help is greatly appreciated.

package com.example.helloandroid;

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.widget.TextView;

public class AccActivity extends Activity implements SensorEventListener {
private SensorManager sensorManager;

TextView xCoor; // declare X axis object
TextView yCoor; // declare Y axis object
TextView zCoor; // declare Z axis object

@Override
public void onCreate(Bundle savedInstanceState){

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    xCoor=(TextView)findViewById(R.id.xcoor); // create X axis object
    yCoor=(TextView)findViewById(R.id.ycoor); // create Y axis object
    zCoor=(TextView)findViewById(R.id.zcoor); // create Z axis object

    sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
    // add listener. The listener will be HelloAndroid (this) class
    sensorManager.registerListener(this,
            sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
            SensorManager.SENSOR_DELAY_NORMAL);

    /*  More sensor speeds (taken from api docs)
        SENSOR_DELAY_FASTEST get sensor data as fast as possible
        SENSOR_DELAY_GAME   rate suitable for games
        SENSOR_DELAY_NORMAL rate (default) suitable for screen       orientation changes
    */
}

public void onAccuracyChanged(Sensor sensor,int accuracy){

}

public void onSensorChanged(SensorEvent event){

    // check sensor type
    if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){

        // assign directions
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];

        xCoor.setText("X: "+x);
        yCoor.setText("Y: "+y);
        zCoor.setText("Z: "+z);
    }
}

}

Upvotes: 0

Views: 2783

Answers (1)

NickT
NickT

Reputation: 23873

That rate at which you receive data is going to be dependent on the discretion of the operating system, as the data is delivered by events triggering callbacks. It's also likely to device dependent too. You can't poll the sensors at a predetermined rate. The SensorManager API docs state

public boolean registerListener (SensorEventListener listener, Sensor sensor, int rate)

The rate sensor events are delivered at. This is only a hint to the system. Events may be received faster or slower than the specified rate. Usually events are received faster. The value must be one of SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST or, the desired delay between events in microsecond.

So you could ask for a delay of 10,000 microseconds (10ms), just how often it would be delivered to your onSensorChanged could only be determined by an experiment to measure it.

Upvotes: 1

Related Questions