Xamarin forms — не удается сканировать устройства BLE

#c# #android #xamarin #bluetooth-lowenergy

#c# #Android #xamarin #bluetooth -низкое энергопотребление

Вопрос:

Я новичок в Xamarin forms и C #. Я пытаюсь сканировать устройства BLE, используя собственный API Xamarin forms, прилагаемый код. Я использую Xiomi note 5 под управлением Android 9.

 using Android.Bluetooth;
using Android.Bluetooth.LE;
using Android.Runtime;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Xamarin.Forms;


namespace bletest
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]


    public class MyScanCallback : ScanCallback
    {
        public override void OnBatchScanResults(IList<ScanResult> results)
        {
            base.OnBatchScanResults(results);
        }

        public override void OnScanResult([GeneratedEnum] ScanCallbackType callbackType, ScanResult result)
        {
            base.OnScanResult(callbackType, result);
        }

        public override void OnScanFailed([GeneratedEnumAttribute] ScanFailure errorCode)
        {
            base.OnScanFailed(errorCode);
        }
    }

    public class newbtle
    {
        private readonly BluetoothAdapter   _ba;
        private readonly BluetoothLeScanner _sc;
        private readonly MyScanCallback     _scCb;
 
        public newbtle()
        {
            _ba = BluetoothAdapter.DefaultAdapter;
            _sc = _ba.BluetoothLeScanner;
            _scCb = new MyScanCallback();

        }

        public  void BleScan()
        {
            if (_ba.Enable() == true)
            {
                _sc.StartScan(_scCb);
            }
        }

        public void BleScanStop()
        {
            _sc.StopScan(_scCb);
            _sc.FlushPendingScanResults(_scCb);
            _ba.Disable();
        }

        public string GetScanMode()
        {
            return _ba.ScanMode.ToString();
        }

        public string GetStateMode()
        {
            return _ba.State.ToString();
        }

    }



    public partial class MainPage : ContentPage
    {
        newbtle bt = new newbtle();

        public MainPage()
        {
            InitializeComponent();
        }

        private void Button_Clicked(object sender, EventArgs e)
        {
            bt.BleScan();
        }

        private void Button_Clicked_1(object sender, EventArgs e)
        {
            bt.BleScanStop();

        }

    }
}
  

Когда выполняется вызов bt.BleScan, обратный вызов не вызывается, когда bt.BleScan вызывается во второй раз без выключения сканера, OnScanFailed вызывается с «уже активной ошибкой».

Когда я запускаю утилиту BLE explorer на том же мобильном устройстве в той же среде, она сканирует несколько устройств BLE.

Любое предложение, в чем может быть проблема? Спасибо

Комментарии:

1. Просто дважды проверьте, есть ли в вашем приложении все необходимые для выполнения пермы? Курс определения местоположения и fine и администратор bluetooth?

2. У него есть точное местоположение и местоположение курса, а также разрешения Bluetooth.