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; } }
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; } }
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); } }