Xamarin Forms Bluetooth LE не показывает близлежащие обнаруживаемые устройства - PullRequest
0 голосов
/ 30 апреля 2018

Я создаю приложение, использующее функцию Bluetooth, например, устройства сканирования и т. Д. Я проверил флаг сканирования и возвращает значение true, но не показываю обнаруживаемое устройство, которое я тестирую.

Я использую Samsung J7 Pro в качестве устройства для тестирования приложений и Samsung J7 в качестве устройства, которое я хочу видеть в списке обнаруженных устройств.

J7 уже установлен как видимый и с включенным Bluetooth.

Я основал свои коды в Monkey.BluetoothLE

Вот что у меня есть:

Объявления

ObservableCollection<BluetoothViewModel> vm = new ObservableCollection<BluetoothViewModel>();
Android.Bluetooth.BluetoothManager _blManager;
Android.Bluetooth.BluetoothManager _blManager;
Robotics.Mobile.Core.Bluetooth.LE.Adapter _bleAdapter;

Функция

public BluetoothPage()
{
    InitializeComponent();
    lvInfo.ItemsSource = vm;

    var appContext = Android.App.Application.Context;
    _blManager = (Android.Bluetooth.BluetoothManager)appContext.GetSystemService("bluetooth"); 
    _blAdapter = _blManager.Adapter;
    _bleAdapter = new Robotics.Mobile.Core.Bluetooth.LE.Adapter();

    _bleAdapter.DeviceDiscovered += _bleAdapter_DeviceDiscovered;
    _bleAdapter.ScanTimeoutElapsed += _bleAdapter_ScanTimeoutElapsed;
}

private void btnScanStopBluetooth_Click(object sender, EventArgs e)
{
    if (!_bleAdapter.IsScanning)
    {
        if (!_blAdapter.IsEnabled)
        {
            _blAdapter.Enable();
            DisplayInformation("Turning on bluetooth...");
            while (!_blAdapter.IsEnabled)
            {
                //do nothing until enabled
            }
        }
        vm.Clear();
        btnScan.Text = "Stop Scan";
        _bleAdapter.StartScanningForDevices();
    }
    else
    {
        btnScan.Text = "Start Scan";
        _bleAdapter.StopScanningForDevices();
    }
}

private void _bleAdapter_DeviceDiscovered(object sender, Robotics.Mobile.Core.Bluetooth.LE.DeviceDiscoveredEventArgs e)
{
    count++;
    vm.Add(new BluetoothViewModel
    {
        Name = e.Device.Name,
        ID = e.Device.ID.ToString(),
        RSSI = e.Device.Rssi.ToString()
    });
}

private void _bleAdapter_ScanTimeoutElapsed(object sender, EventArgs e)
{
    DisplayInformation("Scan Timeout");
    _bleAdapter.StopScanningForDevices();
    btnScan.Text = "Start Scan";
}

private void DisplayInformation(string line)
{
    lblStatus.Text = line;
}

Представление списка связано с "vm", которое будет отображать обнаруженное устройство. Он ничего не показывает, и счетчик всегда равен нулю, но я проверил флаг сканирования, используя _bleAdapter.IsScanning, он возвращает true.

EDIT: Я пробовал другие примеры программ с открытым исходным кодом для Bluetooth, таких как

xamarin-bluetooth-le (BLE Explorer)

Bluetooth-Xamarin.Forms (DemoBluetooth)

Ни один из них, кажется, не перечисляет устройство. Когда я использую мое встроенное приложение Bluetooth в настройках, оно отображает список устройств. Что мне здесь не хватает?

1 Ответ

0 голосов
/ 09 апреля 2019

Вы предоставили разрешение на Bluetooth и местоположение?

Вы должны предоставить разрешение в Манифесте / или Настройках и в зависимости от sdk (23+) также запрашивать у пользователя дополнительное разрешение. https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/permissions?tabs=windows

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...