I am using stepcounter sensor to detect stepcounts but OnSensorChanged method never gets called.
I have created interface in in PCL-
namespace Pedometer
{
public interface IStepCounter
{
int Steps { get; set; }
bool IsAvailable();
void InitSensorService();
void StopSensorService();
}
}
Android project code-
[assembly: Dependency(typeof(StepCounter))]
namespace Pedometer.Droid
{
public class StepCounter : Java.Lang.Object, IStepCounter, ISensorEventListener
{
private int StepsCounter = 0;
private SensorManager sManager;
public int Steps
{
get { return StepsCounter; }
set { StepsCounter = value; }
}
public new void Dispose()
{
sManager.UnregisterListener(this);
sManager.Dispose();
}
public void InitSensorService()
{
sManager = Android.App.Application.Context.GetSystemService(Context.SensorService) as SensorManager;
sManager.RegisterListener(this, sManager.GetDefaultSensor(SensorType.StepDetector), SensorDelay.Fastest);
}
public void OnAccuracyChanged(Sensor sensor, [GeneratedEnum] SensorStatus accuracy)
{
Console.WriteLine("OnAccuracyChanged called");
}
public void OnSensorChanged(SensorEvent e) //This never gets called
{
Console.WriteLine(e.ToString());
}
public void StopSensorService()
{
sManager.UnregisterListener(this);
}
public bool IsAvailable()
{
return Android.App.Application.Context.PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureSensorStepCounter) && Android.App.Application.Context.PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureSensorStepDetector);
}
}
}
My mainpage code-
namespace Pedometer
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
if (DependencyService.Get<IStepCounter>().IsAvailable())
{
DependencyService.Get<IStepCounter>().InitSensorService();
GetCoBut.IsVisible = true;
}
}
private void Button_Clicked(object sender, EventArgs e)
{
_actualSteps.Text = DependencyService.Get<IStepCounter>().Steps.ToString();
}
}
}