Location in Mono for Android: Listing 1

Retrieving device orientation from sensors.

using System;
using System.Collections.Generic;
using Android.App;
using Android.Content;
using Android.Hardware;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;

namespace Compass
    [Activity(Label = "Compass", MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation=Android.Content.PM.ScreenOrientation.Portrait)]
    public class Activity1 : Activity, ISensorEventListener
        int count = 1;
        private Android.Hardware.SensorManager sm;
        private bool sersorrunning;
        private CompassView compView;
        private Sensor s;

        protected override void OnCreate(Bundle bundle)
            var layout = FindViewById<LinearLayout>(Resource.Id.ll);
            var Params = new Android.Widget.LinearLayout.LayoutParams(ViewGroup.LayoutParams.FillParent, ViewGroup.LayoutParams.FillParent);

            compView = new CompassView(this, null);
            layout.AddView(compView, Params);

            sm = (Android.Hardware.SensorManager)GetSystemService(Context.SensorService);
            IList<Sensor> mySensors = sm.GetSensorList(SensorType.Orientation);

            if (mySensors.Count > 0)
                s = mySensors[0];
                sm.RegisterListener(this, mySensors[0], SensorDelay.Normal);
                sersorrunning = true;
                Toast.MakeText(this, "Start ORIENTATION Sensor", ToastLength.Long).Show();

                Toast.MakeText(this, "No ORIENTATION Sensor", ToastLength.Long).Show();
                sersorrunning = false;

        public void OnAccuracyChanged(Sensor sensor, Android.Hardware.SensorStatus accuracy)

        public void OnSensorChanged(SensorEvent e)
            if (e.Sensor.Type == SensorType.Orientation)
                float dir = e.Values[0];

        protected override void OnPause()
        protected override void OnResume()
            sm.RegisterListener(this, s, SensorDelay.Normal);
        protected override void OnDestroy()

About the Author

Wallace (Wally) B. McClure has authored books on iPhone programming with Mono/Monotouch, Android programming with Mono for Android, application architecture, ADO.NET, SQL Server and AJAX. He's a Microsoft MVP, an ASPInsider and a partner at Scalable Development Inc. He maintains a blog, and can be followed on Twitter.

comments powered by Disqus


  • VS Code Update Adds Python Tutorials

    The Visual Studio Code dev team added new Python tutorials as part of the regular monthly update, this one for March 2020, bringing the open-source, cross-platform code editor to version 1.44.

  • Top 3 Blazor Extensions for Visual Studio Code

    Some developers prefer to create applications with Microsoft's open-source Blazor tooling from within the open-source, cross-platform Visual Studio Code editor. Here are the top tools in the VS Code Marketplace for those folk, as measured by the number of installations.

  • How to Invert a Machine Learning Matrix Using C#

    VSM Senior Technical Editor Dr. James McCaffrey, of Microsoft Research, explains why inverting a matrix -- one of the more common tasks in data science and machine learning -- is difficult and presents code that you can use as-is, or as a starting point for custom matrix inversion scenarios.

  • Microsoft Engineer: 'It's Time to Move OData to .NET 5'

    Microsoft engineer Sam Xu says "it’s time to move OData to .NET 5" and in a new blog post he shows how to do just that.

  • Microsoft Goes Virtual with Developer Education in Face of COVID-19

    Like many organizations that host developer educational events, Microsoft has gone virtual amid shelter-in-place directives and a surge in remote work stemming from the COVID-19 pandemic.

.NET Insight

Sign up for our newsletter.

Terms and Privacy Policy consent

I agree to this site's Privacy Policy.

Upcoming Events