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


  • New TypeScript 4.2 Tweaks Include Project Explainer

    Microsoft shipped TypeScript 4.2 -- the regular quarterly update to the open source programming language that improves JavaScript with static types -- with a host of tweaks including a way to explain why files are included in a project.

  • What's Top-Paying .NET Skill, In-Demand Language?

    New tech reports reveal the top-paying .NET skills and most in-demand programming languages in the Microsoft-centric developer landscape.

  • Microsoft's Distributed Application Runtime (Dapr) Debuts for Microservices

    Dapr is now production ready in version 1.0, easing microservices development on-premises, on the edge or in the cloud by abstracting away distributed computing hassles.

  • What's New in EF Core 6.0 Preview 1

    The Entity Framework Core 6 dev team shipped Preview 1 this week, headed toward a debut with the larger, unifying .NET 6 umbrella platform in November.

Upcoming Events