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.