Sensor Fun: Using the accelerometer on Android

April 27th, 2010 by

Here is an example on how to use the accelerometer in your Android application. If you want to simulate the acceleration on the emulator I highly recommend the Sensor Simulator on the OpenIntents website.

The following example app displays the coordinates received by the sensor.

 

The Acceleration App

  • The activity – AccelerationActivity.java
    package com.hascode.android;
     
    import android.app.Activity;
    import android.content.Context;
    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 AccellerationActivity extends Activity {
    	private TextView result;
    	private SensorManager sensorManager;
    	private Sensor sensor;
    	private float x, y, z;
     
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
     
    		sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    		sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
     
    		result = (TextView) findViewById(R.id.result);
    		result.setText("No result yet");
    	}
     
    	private void refreshDisplay() {
    		String output = String
    				.format("x is: %f / y is: %f / z is: %f", x, y, z);
    		result.setText(output);
    	}
     
    	@Override
    	protected void onResume() {
    		super.onResume();
    		sensorManager.registerListener(accelerationListener, sensor,
    				SensorManager.SENSOR_DELAY_GAME);
    	}
     
    	@Override
    	protected void onStop() {
    		sensorManager.unregisterListener(accelerationListener);
    		super.onStop();
    	}
     
    	private SensorEventListener accelerationListener = new SensorEventListener() {
    		@Override
    		public void onAccuracyChanged(Sensor sensor, int acc) {
    		}
     
    		@Override
    		public void onSensorChanged(SensorEvent event) {
    			x = event.values[0];
    			y = event.values[1];
    			z = event.values[2];
    			refreshDisplay();
    		}
     
    	};
    }

The Application Layout

  • A simple layout defined in the main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
    <TextView
    	android:id="@+id/result"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text=""
        />
    </LinearLayout>
  • The strings.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="hello">Hello World, AccellerationActivity!</string>
        <string name="app_name">Accelerometer Snippet</string>
    </resources>

Google App Inventor

*update* If you like to see if this application is developed using Google’s App Inventor then take a look at the article “How to create an Android App using Google’s App Inventor

Resources

Tags: , , ,

5 Responses to “Sensor Fun: Using the accelerometer on Android”

  1. sks Says:

    Are there no ways to get acceleration values without EventListener?

  2. micha kops Says:

    imho there is currently no other way. if you find one – please tell me :)

  3. Pavel Says:

    Your code is amazing, tiny and explicit, by the way i need connect my cel phone whit pc yet.
    Tanxs.

  4. Devang Says:

    Your code is very helpfull ..Its simple and adaptive..

  5. mayur Says:

    Thanks for publishing small but accurate tutorial!!

Search
Categories