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)
                    {
                    }
                }
            }
        }
Exemple #2
0
        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;
            }
        }
Exemple #3
0
        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();
        }
Exemple #4
0
        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.");
            }
        }