public DroidBluetoothDriver(Guid[] filter) : this(null, null) { ScanSettings.Builder scanSettingsBuilder = null; scanSettingsBuilder = new ScanSettings.Builder(); scanSettingsBuilder.SetMatchMode(BluetoothScanMatchMode.Aggressive); scanSettingsBuilder.SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency); this.scanSettings = scanSettingsBuilder.Build(); this.scanfiltersList = new List <ScanFilter>(); if (filter != null && filter.Length > 0) { foreach (Guid selectedFilter in filter) { ParcelUuid parcelUuid = null; ScanFilter.Builder filterBuilder = new ScanFilter.Builder(); ScanFilter currentFilter = null; try { parcelUuid = ParcelUuid.FromString(selectedFilter.ToString()); filterBuilder.SetServiceUuid(parcelUuid); currentFilter = filterBuilder.Build(); this.scanfiltersList.Add(currentFilter); } catch (Exception) { } } } }
public void Start() { ScanSettings.Builder scanSettingsBuilder = null; ScanSettings scanSettings = null; switch (this.DriverState) { case BluetoothDriverStates.NotPresent: return; case BluetoothDriverStates.Enabled: this.scannerCallback = new DroidLEScannerCallback(); this.bluetoothLeScanner = this.bluetoothAdapter.BluetoothLeScanner; if (this.scanfiltersList.Count == 0) { this.bluetoothLeScanner.StartScan(this.scannerCallback); } else { scanSettingsBuilder = new ScanSettings.Builder(); scanSettingsBuilder.SetMatchMode(BluetoothScanMatchMode.Aggressive); scanSettingsBuilder.SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency); scanSettings = scanSettingsBuilder.Build(); try { this.bluetoothLeScanner.StartScan(this.scanfiltersList, scanSettings, this.scannerCallback); } catch (Exception) { } } this.DriverState = BluetoothDriverStates.Discovering; break; } }
void InitializeScanner() { if (_adapter == null) { return; } // initialize scanner var sb = new ScanSettings.Builder() .SetCallbackType(ScanCallbackType.AllMatches) .SetScanMode(ScanMode.LowLatency); if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { sb = sb.SetMatchMode(BluetoothScanMatchMode.Aggressive).SetNumOfMatches(1); } _scanSettings = sb.Build(); sb.SetReportDelay(1000); _scanSettingsBatch = sb.Build(); _scanner = _adapter.BluetoothLeScanner; _scanCallback = new ScanCallbackImpl(this); _scanCallbackBatch = new BatchScanCallbackImpl(); }
protected virtual IObservable <ScanResult> NewScan(ScanConfig config) => Observable.Create <ScanResult>(ob => { this.callbacks = new LollipopScanCallback((native, rssi, sr) => { var scanResult = this.ToScanResult(native, rssi, new AdvertisementData(sr)); ob.OnNext(scanResult); }); var builder = new ScanSettings.Builder(); var scanMode = this.ToNative(config.ScanType); builder.SetScanMode(scanMode); if (CrossBleAdapter.AndroidConfiguration.AdvancedScannerSettings) { if (config.MatchMode != null) { builder.SetMatchMode(this.ToNative(config.MatchMode.Value)); } if (config.NumOfMatches != null) { builder.SetNumOfMatches((int)this.ToNative(config.NumOfMatches.Value)); } } var scanFilters = new List <ScanFilter>(); if (config.ServiceUuids != null && config.ServiceUuids.Count > 0) { foreach (var guid in config.ServiceUuids) { var uuid = guid.ToParcelUuid(); scanFilters.Add(new ScanFilter.Builder() .SetServiceUuid(uuid) .Build() ); } } if (config.AndroidUseScanBatching && this.manager.Adapter.IsOffloadedScanBatchingSupported) { builder.SetReportDelay(100); } this.manager.Adapter.BluetoothLeScanner.StartScan( scanFilters, builder.Build(), this.callbacks ); return(() => this.manager.Adapter.BluetoothLeScanner?.StopScan(this.callbacks)); });
public DroidBluetoothDriver(IEnumerable <ScanFilter> scanFilters, ScanSettings scanSettings) { ScanSettings.Builder scanSettingsBuilder = null; if (scanFilters != null) { this.scanfiltersList = new List <ScanFilter>(scanFilters); } else { this.scanfiltersList = new List <ScanFilter>(); } if (scanSettings != null) { this.scanSettings = scanSettings; } else { scanSettingsBuilder = new ScanSettings.Builder(); scanSettingsBuilder.SetMatchMode(BluetoothScanMatchMode.Aggressive); scanSettingsBuilder.SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency); this.scanSettings = scanSettingsBuilder.Build(); } if (!Application.Context.PackageManager.HasSystemFeature(PackageManager.FeatureBluetoothLe)) { this.State = BluetoothDriverStates.NotPresent; return; } this.bluetoothManager = Application.Context.GetSystemService(Context.BluetoothService) as BluetoothManager; if (this.bluetoothManager != null) { this.bluetoothAdapter = this.bluetoothManager.Adapter; if (this.bluetoothAdapter != null) { this.State = BluetoothDriverStates.Enabled; } } }
void IAdvertiseAndDiscoverBluetoothDevice.Discover() { try { Analytics.TrackEvent(Build.Model + " Discover method called."); List <ScanFilter> filters = new List <ScanFilter>(); ScanFilter filter = new ScanFilter.Builder() .SetServiceUuid(new ParcelUuid(MY_UUID)) .Build(); filters.Add(filter); //ScanSettings settings = new ScanSettings.Builder() // .SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency) // .Build(); ScanSettings.Builder builder = new ScanSettings.Builder(); builder.SetScanMode(Android.Bluetooth.LE.ScanMode.LowLatency); if (Build.VERSION.SdkInt >= BuildVersionCodes.M /* Marshmallow */) { builder.SetMatchMode(BluetoothScanMatchMode.Aggressive); builder.SetNumOfMatches((int)BluetoothScanMatchNumber.MaxAdvertisement); builder.SetCallbackType(ScanCallbackType.AllMatches); } var settings = builder.Build(); myScanCallback = new MyScanCallback(); bluetoothLeScanner = BluetoothAdapter.DefaultAdapter.BluetoothLeScanner; bluetoothLeScanner.StartScan(filters, settings, myScanCallback); } catch (System.Exception ex) { Analytics.TrackEvent(Build.Model + " Something went wrong in Discover method."); } }