Windows phone crash device.Sensors.ni.dll

0

I am experiencing some crashes on my app (somewhat similar to a compass app). The windows crash report is telling me this:

frame 0: 
Microsoft.Devices.Sensors.ni.dll; Microsoft.Devices.Sensors.Accelerometer.Start; 0x0000006c    
frame 1:
PivotApp1.ni.DLL; PivotApp1.MainPage+_start_d__0.MoveNext; 0x000001d4    
frame 2: 
mscorlib.ni.dll; System.Runtime.CompilerServices.AsyncMethodBuilderCore._ThrowAsync_b__3; 0x00000036

I am unable to understand what this exactly means here. Based on what I get from it, it is probably because of the accelerometer.

This is my current code and It seems like the error is generated from somewhere in here :

private async void start()
    {
        //Check for the user agreement in use his position. If not, method returns.
        if ((bool)IsolatedStorageSettings.ApplicationSettings["LocationConsent"] != true)
        {
            // The user has opted out of Location.

            MessageBox.Show(AppResources.main_cantuse);

            Application.Current.Terminate();
        }

        else
        {
            //KOMPASS
            if (compass == null)
            {
                // Instantiate the compass.
                compass = new Compass();

                // Specify the desired time between updates. The sensor accepts
                // intervals in multiples of 20 ms.
                compass.TimeBetweenUpdates = TimeSpan.FromMilliseconds(20);

                compass.CurrentValueChanged +=
                new EventHandler<SensorReadingEventArgs<CompassReading>>(compass_CurrentValueChanged);
                compass.Calibrate +=
                new EventHandler<CalibrationEventArgs>(compass_Calibrate);
            }

            try
            {
                compass.Start();
                timer.Start();

                accelerometer = new Accelerometer();
                accelerometer.CurrentValueChanged +=
                    new EventHandler<SensorReadingEventArgs<AccelerometerReading>>(accelerometer_CurrentValueChanged);
                accelerometer.Start();
            }
            catch (InvalidOperationException)
            {
                MessageBox.Show(AppResources.main_unabletostart);                    
            }

I would like to ask, Do I have to check if the accelerometer is ready (or null check or something else) ?

Any help or guidance here is appreciated.

c#
crash
windows-phone-8.1
asked on Stack Overflow Apr 17, 2015 by Steffei • edited Apr 17, 2015 by Matt Murdock

1 Answer

0

Those crashes are probably from devices that do not have a compass (yes, there are devices like this out there).

You should check for the compass with Compass.IsSupported and only use it when it returns true.

answered on Stack Overflow Apr 17, 2015 by Igor Kulman

User contributions licensed under CC BY-SA 3.0