Simple compass code with Android Studio
Android tutorial to learn how to build compass application in android studio.
Now in this blog post, I am going to make a very simple application which shows the direction like North, South, East, West. Exactly, I am going to build a simple compass application. I will show you the Java and XML code that will be used to build this simple compass application.
Before going to start I want to inform you that Some of the android devices do not have full support for motions sensors. So this application will not work for those types of android devices.
Code to build compass application in Android Studio
Compass image
Before you start coding in Android Studio you need a compass image which will rotate and show you the direction when your phone rotates. Here is the image I have used for the compass app:
You can also use the image in your compass app or use a different image.
Let’s coding
Now let’s start with coding. I am going to give you the full Java and XML code of this app.
Java code to create compass application in Android Studio
Here is the main Java code (MainActivity.java):
package com.codespeedy.compassbyeyeswift; import android.hardware.Sensor; import android.hardware.SensorManager; import android.support.v7.app.AppCompatActivity; import android.view.animation.Animation; import android.view.animation.RotateAnimation; import android.hardware.SensorEvent; import android.widget.ImageView; import android.widget.TextView; import android.hardware.SensorEventListener; import android.os.Bundle; public class MainActivity extends AppCompatActivity implements SensorEventListener { // device sensor manager private SensorManager SensorManage; // define the compass picture that will be use private ImageView compassimage; // record the angle turned of the compass picture private float DegreeStart = 0f; TextView DegreeTV; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // compassimage = (ImageView) findViewById(R.id.compass_image); // TextView that will display the degree DegreeTV = (TextView) findViewById(R.id.DegreeTV); // initialize your android device sensor capabilities SensorManage = (SensorManager) getSystemService(SENSOR_SERVICE); } @Override protected void onPause() { super.onPause(); // to stop the listener and save battery SensorManage.unregisterListener(this); } @Override protected void onResume() { super.onResume(); // code for system's orientation sensor registered listeners SensorManage.registerListener(this, SensorManage.getDefaultSensor(Sensor.TYPE_ORIENTATION), SensorManager.SENSOR_DELAY_GAME); } @Override public void onSensorChanged(SensorEvent event) { // get angle around the z-axis rotated float degree = Math.round(event.values[0]); DegreeTV.setText("Heading: " + Float.toString(degree) + " degrees"); // rotation animation - reverse turn degree degrees RotateAnimation ra = new RotateAnimation( DegreeStart, -degree, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); // set the compass animation after the end of the reservation status ra.setFillAfter(true); // set how long the animation for the compass image will take place ra.setDuration(210); // Start animation of compass image compassimage.startAnimation(ra); DegreeStart = -degree; } @Override public void onAccuracyChanged(Sensor sensor, int accuracy) { // not in use } }
You need to replace the package name with your own. On Google play store each of the android application should have a unique package name just like domain names.
And here is the code for the main layout XML file (activity_main.xml):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:id="@+id/DegreeTV" android:layout_marginBottom="40dp" android:layout_marginTop="20dp" android:text="Heading: 0.0" android:textSize="25sp" android:textColor="@color/colorAccent" android:textStyle="normal|bold" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/compass_image" android:layout_below="@+id/DegreeTV" android:layout_centerHorizontal="true" android:src="@drawable/compass_icon" /> </RelativeLayout>
That’s all you need to create your compass app for Android. The image will show the direction and the TextView will display angle in degree with respect to North.
Now you can test your app. You can run your app or you can also build the apk or signed apk and then test it on your android device. See the picture below how the app will look:

Screenshot of compass application
Learn more,
- Convert HTML Template Into Android App – Android Studio
- How To Display Image In Android Studio Using ImageView?
Not Supported in Some Marshmallow Devices…
Please Help Me…