コード例 #1
0
 void StartScan()
 {
     _scanning = true;
     try
     {
         _scanner.StartScan(_scanFilters, _scanSettings, _scanCallback);
         _scanner.StartScan(_scanFilters, _scanSettingsBatch, _scanCallbackBatch);
     }
     catch (Exception err)
     {
         _logger.LogError(err, "StartScan Crashed");
     }
 }
コード例 #2
0
 public void OnAnimationStart(Animator animation)
 {
     LbStatus.Text = "Se cauta dispozitive...";
     if (_bluetoothManager == null)
     {
         return;
     }
     _bluetoothAdapter = _bluetoothManager.Adapter;
     if (!_bluetoothAdapter.IsEnabled)
     {
         StartActivityForResult(new Intent(BluetoothAdapter.ActionRequestEnable), 11);
     }
     else
     {
         BluetoothScanner = _bluetoothAdapter.BluetoothLeScanner;
         BluetoothScanner.StartScan(ScanCallback);
         handler.PostDelayed(() => {
             //mScanning = false;
             if (!isDeviceConnected)
             {
                 Log.Error("ScanTest", "Timeout");
                 BluetoothScanner.StopScan(ScanCallback);
                 LbStatus.Text = "Nu s-au gasit dispozitive";
                 _animationView.CancelAnimation();
             }
         }, SCAN_PERIOD);
         //_scanButton.Enabled = false;
         _dataContainer.Visibility = ViewStates.Gone;
     }
 }
コード例 #3
0
        public void StartScan()
        {
            if (!SupportsBluetooth())
            {
                throw new BluetoothUnsupportedException("This device does not support Bluetooth.");
            }

            if (!IsReadyToUseBluetooth())
            {
                throw new BluetoothTurnedOffException("Bluetooth service on this device is turned off.");
            }

            if (IsScanning)
            {
                return;
            }

            if (OS_VER < BuildVersionCodes.Lollipop)
            {
                #pragma warning disable CS0618 // Type or member is obsolete
                _btAdapter.StartLeScan(_scanCallbackOld);
                #pragma warning restore CS0618 // Type or member is obsolete
            }
            else
            {
                if (_bleScanner == null)
                {
                    _bleScanner = _btAdapter.BluetoothLeScanner;
                }
                _bleScanner.StartScan(_scanCallbackNew);
            }
            IsScanning = true;
        }
コード例 #4
0
        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....";
        }
コード例 #5
0
        public ScanEventSource()
        {
            ScanResults = Observable.FromEvent<ScanResult>(h => OnDeviceDetected += h, h => OnDeviceDetected -= h);
            var appContext = Application.Context;
            var builder = new ScanSettings.Builder();
            builder.SetReportDelay(0);
            builder.SetScanMode(ScanMode.LowLatency);
            var manager = (BluetoothManager)appContext.GetSystemService(Context.BluetoothService);
            var adapter = manager.Adapter;
            bluetoothLeScanner = adapter.BluetoothLeScanner;
            var simpleScanCallback = new SimpleScanCallback(result =>
            {
                var payload = result.ScanRecord.GetBytes();
                var majorId = payload[26];
                if (payload[5] == 76 && majorId == Constants.MajorId)
                {
                    var txPower = 255 - payload[29];
                    var minorId = (payload[27] << 8) + payload[28];

                    var deviceId = new DeviceIdentifier(new Guid(), majorId, minorId);
                    var data = new ScanResult(deviceId, result.Rssi, txPower);
                    OnDeviceDetected?.Invoke(data);
                }
            });
            // taken from https://www.pubnub.com/blog/2015-04-15-build-android-beacon-ibeacon-detector/ , but not detecting our beacons
            //bluetoothLeScanner.StartScan(new List<ScanFilter> {CreateScanFilter()}, CreateScanSettings(), simpleScanCallback);
            bluetoothLeScanner.StartScan(simpleScanCallback);
        }
コード例 #6
0
        public void StartScan()
        {
            if (IsScanningBeacon)
            {
                return;
            }

            _bleScanner.StartScan(_scanCallback);
            IsScanningBeacon = true;
        }
コード例 #7
0
        public async Task BeginScanningForDevices()
        {
            UpdateTextView("BluetoothLEManager: Starting a scan for devices.");
            _isScanning        = true;
            _discoveredDevices = new List <BluetoothDevice>();
            _scanner.StartScan(_scannerCallback);
            await Task.Delay(10000);

            StopScanningForDevices();
        }
コード例 #8
0
 private void Scan()
 {
     if (_bluetoothManager.Adapter.State != State.Disconnecting)
     {
         Console.WriteLine("StartScan");
         _textView.Text = string.Empty;
         _bluetoothLeScanner.StartScan(Scanner.Instance);
         _handler.PostDelayed(() =>
         {
             Console.WriteLine("StopScan");
             _bluetoothLeScanner.StopScan(Scanner.Instance);
         }, 10000);
     }
 }
コード例 #9
0
        internal BluetoothLEScan(BluetoothLEScanOptions options, BluetoothLeScanner scanner)
        {
            _options = options;
            if (options != null)
            {
                _filters = options.Filters;
            }

            //var settings = new ScanSettings.Builder().SetScanMode(ScanMode.LowLatency).Build();

            _callback = new Callback(this);
            _scanner  = scanner;
            scanner.StartScan(_callback);
            Active = true;
        }
コード例 #10
0
        public void Scanner()
        {
            bluetoothLeScanner = mBluetoothAdapter.BluetoothLeScanner;
            mScanning          = true;

            /*
             * Handler mHandler = new Handler();
             * mHandler.PostDelayed(new Action(delegate {
             *  mScanning = false;
             *  bluetoothLeScanner.StopScan(this);
             *  if (ScanResultEvent != null) {
             *      ScanResultEvent(mLeDevices);
             *  }
             * }), SCAN_PERIOD);
             */
            bluetoothLeScanner.StartScan(this);
        }
コード例 #11
0
ファイル: MainActivity.cs プロジェクト: ytabuchi/BleSample
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.Main);

            // Bluetooth Low Energyがサポートされているかのチェック。
            if (!PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureBluetoothLe))
            {
                Toast.MakeText(this, Resource.String.ble_not_supported, ToastLength.Short).Show();
                Finish();
            }

            // BluetoothManager,BluetoothAdapter,BluetoothLeScannerをインスタンス化。
            BluetoothManager manager = (BluetoothManager)GetSystemService(BluetoothService);
            BluetoothAdapter adapter = manager.Adapter;
            scanner = adapter.BluetoothLeScanner;

            // BluetoothのAdapterが取得できているか=Bluetoothがサポートされているかのチェック。
            if (adapter == null)
            {
                Toast.MakeText(this, Resource.String.error_bluetooth_not_supported, ToastLength.Short).Show();
                Finish();
                return;
            }

            var scanButton = FindViewById<Button>(Resource.Id.scanButton);
            scanButton.Click += (sender, e) =>
            {
                bleDevices = new List<BleDeviceData>();

                scanCallback.ScanResultEvent += ScanCallback_ScanResultEvent;
                scanner.StartScan(scanCallback);
                Thread.Sleep(5000);
                scanner.StopScan(scanCallback);
            };

            listView = FindViewById<ListView>(Resource.Id.deviceList);
            listView.ItemClick += (object sender, AdapterView.ItemClickEventArgs e) =>
            {
                var intent = new Intent(this, typeof(ServiceListActivity));
                var sendData = new string[] { bleDevices[e.Position].Name, bleDevices[e.Position].Id };
                intent.PutExtra("data", sendData);
                StartActivity(intent);
            };
        }
コード例 #12
0
        public void StartScan()
        {
            if (IsScanning)
            {
                return;
            }

            if (OS_VER < BuildVersionCodes.Lollipop)
            {
                _scanCallbackOld.DetectedBeaconDict = new Dictionary <string, iBeacon>();
                _btAdapter.StartLeScan(_scanCallbackOld);
            }
            else
            {
                _scanCallbackNew.DetectedBeaconDict = new Dictionary <string, iBeacon>();
                _bleScanner.StartScan(_scanCallbackNew);
            }

            IsScanning = true;
        }
コード例 #13
0
        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.");
            }
        }
コード例 #14
0
        public async void StartScanning()
        {
            if (IsScanning)
            {
                return;
            }

            IsScanning = true;

            // TODO: Handle power on state.

            if (_sdkInt >= Android.OS.BuildVersionCodes.Lollipop) // 21
            {
                _bleScanner   = _adapter.BluetoothLeScanner;
                _scanCallback = new OWBLE_ScanCallback(this);
                var scanFilters         = new List <ScanFilter>();
                var scanSettingsBuilder = new ScanSettings.Builder();

                var scanFilterBuilder = new ScanFilter.Builder();
                scanFilterBuilder.SetServiceUuid(OWBoard.ServiceUUID.ToParcelUuid());
                scanFilters.Add(scanFilterBuilder.Build());
                _bleScanner.StartScan(scanFilters, scanSettingsBuilder.Build(), _scanCallback);
            }
            else if (_sdkInt >= Android.OS.BuildVersionCodes.JellyBeanMr2) // 18
            {
                _leScanCallback = new OWBLE_LeScanCallback(this);
#pragma warning disable 0618
                _adapter.StartLeScan(new Java.Util.UUID[] { OWBoard.ServiceUUID.ToUUID() }, _leScanCallback);
#pragma warning restore 0618
            }
            else
            {
                throw new NotImplementedException("Can't run bluetooth scans on device lower than Android 4.3");
            }

            await Task.Delay(15 * 1000);

            StopScanning();
        }
コード例 #15
0
        public Task <IEnumerable <WaterBoilerMatDevice> > ScanAsync(int timeoutMilliseconds)
        {
            logger.Log($"Call ScanAsync({timeoutMilliseconds})", Category.Debug, Priority.Medium);
            var tcs = new TaskCompletionSource <IEnumerable <WaterBoilerMatDevice> >();

            // check if BluetoothLE APIs are available
            if (Android.App.Application.Context.PackageManager.HasSystemFeature(Android.Content.PM.PackageManager.FeatureBluetoothLe) != true ||
                leScanner == null)
            {
                logger.Log($"BluetoothLE APIs are not available", Category.Warn, Priority.High);
                return(Task.FromException <IEnumerable <WaterBoilerMatDevice> >(new BluetoothLEException("BluetoothLE APIs are not available")));
            }

            var result       = new List <BluetoothDevice>();
            var scanCallback = new LE.ScanCallback((device, rssi, record) =>
            {
                if (result.Any(D => D.Address.Equals(device.Address)))
                {
                    return;
                }

                result.Add(device);
            });

            // Start the Enumeration
            leScanner.StartScan(scanCallback);
            logger.Log($"Start the BluetoothLE device Enumeration", Category.Info, Priority.High);

            handler.PostDelayed(() =>
            {
                leScanner.StopScan(scanCallback);
                logger.Log($"Stop the BluetoothLE device Enumeration. Found {result.Count} devices.", Category.Info, Priority.High);

                tcs.SetResult(result.Where(D => WaterBoilerMatDevice.IsNavienDevice(D.Address))
                              .Select(D => new WaterBoilerMatDeviceAndroid(D, bluetoothAdapter)));
            }, timeoutMilliseconds);

            return(tcs.Task);
        }
コード例 #16
0
ファイル: BLEAdapter.cs プロジェクト: poz1/Poz1.BLE
        public Task <IList <IBLEDevice> > ScanForDevicesAsync()
        {
            _scanForDevicesTCS = new TaskCompletionSource <IList <IBLEDevice> >();
            _discoveredDevices = new List <IBLEDevice>();

            IsScanning = true;

            _adapter.StartScan(this);

            Task.Run(async() =>
            {
                await Task.Delay((int)ScanTimeout.TotalMilliseconds);
                if (IsScanning)
                {
                    IsScanning = false;
                    _adapter.StopScan(this);

                    _scanForDevicesTCS.SetResult(_discoveredDevices);
                }
            });

            return(_scanForDevicesTCS.Task);
        }
コード例 #17
0
        public bool StartScanning()
        {
            if (isScanning)
            {
                return(true);
            }

            if (IsEnabled)
            {
                // Stops scanning after a pre-defined scan period.
                //scanHandler.PostDelayed(new Runnable(() =>
                //{
                //    isScanning = false;

                //    scanner.StopScan(scanCallback);
                //}), 10000);

                isScanning = true;
                ScanFilter.Builder builder = new ScanFilter.Builder();
                builder.SetServiceUuid(DottedUUID);
                ScanSettings.Builder sBuilder = new ScanSettings.Builder();
                sBuilder.SetScanMode(Android.Bluetooth.LE.ScanMode.LowPower);
                scanner.StartScan(new List <ScanFilter> {
                    builder.Build()
                },
                                  sBuilder.Build(),
                                  scanCallback);
                return(true);
            }
            else
            {
                isScanning = false;
                scanner.StopScan(scanCallback);
                return(false);
            }
        }
コード例 #18
0
 public void StartScan()
 {
     bluetoothLeScanner.StartScan(scanCallback);
 }
コード例 #19
0
 private void ScanDevices()
 {
     _scanner = _bluetoothAdapter.BluetoothLeScanner;
     _scanner.StartScan(_scanCallback);
 }