Exemple #1
0
 private void InitNmeaProvider(NmeaParser.Gnss.GnssMonitor oldDevice, NmeaParser.Gnss.GnssMonitor newDevice)
 {
     mapView.LocationDisplay.IsEnabled = false;
     if (newDevice != null)
     {
         mapView.LocationDisplay.DataSource = new NmeaLocationDataSource(newDevice, false);
         mapView.LocationDisplay.IsEnabled  = IsLoaded;
     }
 }
Exemple #2
0
        private async void startButton_Click(object sender, RoutedEventArgs e)
        {
            var info = nmeaDevicePicker.SelectedItem as DeviceInfo;

            if (info != null)
            {
                var device = await info.CreateMethod();

                output.Text = string.Empty;
                messages.Clear();
                device.MessageReceived += device_MessageReceived;
                var _ = device.OpenAsync();
                listener = device;
                startButton.IsEnabled = false;
                stopButton.IsEnabled  = true;
                monitor = new NmeaParser.Gnss.GnssMonitor(device);
                gnssMonitorView.DataContext = monitor;
            }
        }
Exemple #3
0
        private async void Start()
        {
            startButton.Enabled = false;
            status = FindViewById <TextView>(Resource.Id.output);
            var devicePicker = FindViewById <Spinner>(Resource.Id.device_picker);
            var id           = devicePicker.SelectedItem.ToString();
            var btAddress    = devices[id];

            if (btAddress == null)
            {
                if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.AccessFineLocation) != Permission.Granted)
                {
                    ActivityCompat.RequestPermissions(this, new[] { Manifest.Permission.AccessFineLocation }, 1000);
                    return;
                }
                if (launched)
                {
                    return;
                }

                launched = true;
                listener = new NmeaParser.SystemNmeaDevice(ApplicationContext);
            }
            else //Bluetooth
            {
                try
                {
                    status.Text = "Opening bluetooth...";
                    var            adapter     = Android.Bluetooth.BluetoothAdapter.DefaultAdapter;
                    var            bt          = Android.Bluetooth.BluetoothAdapter.DefaultAdapter.GetRemoteDevice(btAddress);
                    Java.Util.UUID SERIAL_UUID = Java.Util.UUID.FromString("00001101-0000-1000-8000-00805F9B34FB"); //UUID for Serial Device Service
                    socket = bt.CreateRfcommSocketToServiceRecord(SERIAL_UUID);
                    try
                    {
                        await socket.ConnectAsync();
                    }
                    catch (Java.IO.IOException)
                    {
                        // This sometimes fails. Use fallback approach to open socket
                        // Based on https://stackoverflow.com/a/41627149
                        socket.Dispose();
                        var m = bt.Class.GetMethod("createRfcommSocket", new Java.Lang.Class[] { Java.Lang.Integer.Type });
                        socket = m.Invoke(bt, new Java.Lang.Object[] { 1 }) as Android.Bluetooth.BluetoothSocket;
                        socket.Connect();
                    }
                    listener = new NmeaParser.StreamDevice(socket.InputStream);
                }
                catch (System.Exception ex)
                {
                    socket?.Dispose();
                    socket       = null;
                    status.Text += "\nError opening Bluetooth device:\n" + ex.Message;
                }
            }

            if (listener != null)
            {
                listener.MessageReceived += Listener_MessageReceived;
                status.Text += "\nOpening device...";
                await listener.OpenAsync();

                status.Text             += "\nConnected!";
                startButton.Enabled      = !(stopButton.Enabled = true);
                monitor                  = new NmeaParser.Gnss.GnssMonitor(listener);
                monitor.LocationChanged += Monitor_LocationChanged;
            }
            else
            {
                startButton.Enabled = !(stopButton.Enabled = false);
            }
        }