1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- using Android.Bluetooth;
- using Android.Bluetooth.LE;
- using Android.Content;
- using Android.OS;
- using System;
- using System.Collections.Generic;
- namespace MyLibrary.Bluetooth
- {
- public class BLEScanner
- {
- private BluetoothManager _bluetoothManager;
- private BluetoothAdapter _bluetoothAdapter;
- private BluetoothLeScanner _bluetoothLeScanner;
- private ScanCallback _scanCallback;
- public BLEScanner(Context context)
- {
- _bluetoothManager = (BluetoothManager)context.GetSystemService(Context.BluetoothService);
- _bluetoothAdapter = _bluetoothManager.Adapter;
- _bluetoothLeScanner = _bluetoothAdapter?.BluetoothLeScanner;
- if (_bluetoothLeScanner == null)
- {
- throw new Exception("Bluetooth LE Scanner is not available.");
- }
- }
-
- /*
- var bleScanner = new BLEScanner(Android.App.Application.Context);
- bleScanner.StartScan(
-
- );
- // Stop the scan after 10 seconds
- Task.Delay(10000).ContinueWith(_ => bleScanner.StopScan());
- */
- public void StartScan(Action<ScanResult> onDeviceFound, Action onScanStopped = null)
- {
- _scanCallback = new CustomScanCallback(onDeviceFound, onScanStopped);
- _bluetoothLeScanner.StartScan(_scanCallback);
- }
- public void StopScan()
- {
- _bluetoothLeScanner?.StopScan(_scanCallback);
- }
- private class CustomScanCallback : ScanCallback
- {
- private readonly Action<ScanResult> _onDeviceFound;
- private readonly Action _onScanStopped;
- public CustomScanCallback(Action<ScanResult> onDeviceFound, Action onScanStopped)
- {
- _onDeviceFound = onDeviceFound;
- _onScanStopped = onScanStopped;
- }
- public override void OnScanResult(ScanCallbackType callbackType, ScanResult result)
- {
- base.OnScanResult(callbackType, result);
- _onDeviceFound?.Invoke(result);
- }
- public override void OnScanFailed(ScanFailure errorCode)
- {
- base.OnScanFailed(errorCode);
- _onScanStopped?.Invoke();
- throw new Exception($"Scan failed with error code: {errorCode}");
- }
- }
- }
- }
|