protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); // Set our view from the "main" layout resource SetContentView(Resource.Layout.activity_main); // Start scanning for the beacon we want to write a value to var scanModeBuilder = new ScanSettings.Builder(); scanModeBuilder.SetScanMode(ScanMode.LowLatency); var deviceAddressFilterBuilder = new ScanFilter.Builder(); deviceAddressFilterBuilder.SetDeviceAddress(_MyDeviceAddress); _Manager = (BluetoothManager)GetSystemService("bluetooth"); _Adapter = _Manager.Adapter; _Scanner = _Adapter.BluetoothLeScanner; _ScanCallback = new BleScanCallback(this); _GattCallback = new BleGattCallback(this); _LogTextView = FindViewById <TextView>(Resource.Id.logTextView); _Scanner.StartScan( new List <ScanFilter> { deviceAddressFilterBuilder.Build() }, scanModeBuilder.Build(), _ScanCallback); _LogTextView.Text = "Started scanning...."; }
private void StartScanningNew(ScanFilterOptions scanFilterOptions) { var hasFilter = scanFilterOptions?.HasFilter == true; List <ScanFilter> scanFilters = null; if (hasFilter) { scanFilters = new List <ScanFilter>(); if (scanFilterOptions.HasServiceIds) { foreach (var serviceUuid in scanFilterOptions.ServiceUuids) { var sfb = new ScanFilter.Builder(); sfb.SetServiceUuid(ParcelUuid.FromString(serviceUuid.ToString())); scanFilters.Add(sfb.Build()); } } if (scanFilterOptions.HasServiceData) { foreach (var serviceDataFilter in scanFilterOptions.ServiceDataFilters) { var sfb = new ScanFilter.Builder(); if (serviceDataFilter.ServiceDataMask == null) { sfb.SetServiceData(ParcelUuid.FromString(serviceDataFilter.ServiceDataUuid.ToString()), serviceDataFilter.ServiceData); } else { sfb.SetServiceData(ParcelUuid.FromString(serviceDataFilter.ServiceDataUuid.ToString()), serviceDataFilter.ServiceData, serviceDataFilter.ServiceDataMask); } scanFilters.Add(sfb.Build()); } } if (scanFilterOptions.HasManufacturerIds) { foreach (var manufacturerDataFilter in scanFilterOptions.ManufacturerDataFilters) { var sfb = new ScanFilter.Builder(); if (manufacturerDataFilter.ManufacturerDataMask != null) { sfb.SetManufacturerData(manufacturerDataFilter.ManufacturerId, manufacturerDataFilter.ManufacturerData); } else { sfb.SetManufacturerData(manufacturerDataFilter.ManufacturerId, manufacturerDataFilter.ManufacturerData, manufacturerDataFilter.ManufacturerDataMask); } scanFilters.Add(sfb.Build()); } } if (scanFilterOptions.HasDeviceAddresses) { foreach (var deviceAddress in scanFilterOptions.DeviceAddresses) { if (BluetoothAdapter.CheckBluetoothAddress(deviceAddress)) { var sfb = new ScanFilter.Builder(); sfb.SetDeviceAddress(deviceAddress); scanFilters.Add(sfb.Build()); } else { Trace.Message($"Device address {deviceAddress} is invalid. The correct format is \"01:02:03:AB:CD:EF\""); } } } if (scanFilterOptions.HasDeviceNames) { foreach (var deviceName in scanFilterOptions.DeviceNames) { var sfb = new ScanFilter.Builder(); sfb.SetDeviceName(deviceName); scanFilters.Add(sfb.Build()); } } } var ssb = new ScanSettings.Builder(); ssb.SetScanMode(ScanMode.ToNative()); if (Build.VERSION.SdkInt >= BuildVersionCodes.O) { // enable Bluetooth 5 Advertisement Extensions on Android 8.0 and above ssb.SetLegacy(false); } //ssb.SetCallbackType(ScanCallbackType.AllMatches); if (_bluetoothAdapter.BluetoothLeScanner != null) { Trace.Message($"Adapter >=21: Starting a scan for devices. ScanMode: {ScanMode}"); if (hasFilter) { if (scanFilterOptions.HasServiceIds) { Trace.Message($"Service UUID Scan Filters: {string.Join(", ", scanFilterOptions.ServiceUuids)}"); } if (scanFilterOptions.HasServiceData) { Trace.Message($"Service Data Scan Filters: {string.Join(", ", scanFilterOptions.ServiceDataFilters.ToString())}"); } if (scanFilterOptions.HasManufacturerIds) { Trace.Message($"Manufacturer Id Scan Filters: {string.Join(", ", scanFilterOptions.ManufacturerDataFilters.ToString())}"); } if (scanFilterOptions.HasDeviceAddresses) { Trace.Message($"Device Address Scan Filters: {string.Join(", ", scanFilterOptions.DeviceAddresses)}"); } if (scanFilterOptions.HasDeviceNames) { Trace.Message($"Device Name Scan Filters: {string.Join(", ", scanFilterOptions.DeviceNames)}"); } } _bluetoothAdapter.BluetoothLeScanner.StartScan(scanFilters, ssb.Build(), _api21ScanCallback); } else { Trace.Message("Adapter >= 21: Scan failed. Bluetooth is probably off"); } }