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)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);
            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();

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

        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];
                compView.updateDirection(dir);
            }
        }

        protected override void OnPause()
        {
            base.OnPause();
            sm.UnregisterListener(this);
        }
        protected override void OnResume()
        {
            base.OnResume();
            sm.RegisterListener(this, s, SensorDelay.Normal);
        }
        protected override void OnDestroy()
        {
            Base.OnDestroy();
             sm.UnregisterListener(this);
        }
    }
}

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

Featured

  • 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