簡體   English   中英

Xamarin Forms Bluetooth LE不顯示附近的可發現設備

[英]Xamarin Forms Bluetooth LE not showing nearby discoverable devices

我正在制作一個利用藍牙功能(例如掃描設備等)的應用程序。我檢查了掃描標志並返回true,但未顯示我正在測試的可發現設備。

我將Samsung J7 Pro用作我的應用程序測試設備,並將Samsung J7用作要在發現的設備列表中看到的設備。

J7已設置為可發現並已打開藍牙。

我的代碼基於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。

編輯:我嘗試了藍牙的其他開源示例程序,例如

xamarin-bluetooth-le (BLE資源管理器)

藍牙Xamarin.Forms (DemoBluetooth)

他們似乎都沒有列出該設備。 當我在設置下使用內置的藍牙應用程序時,它會列出設備。 我在這里想念什么?

您是否已授予藍牙和位置許可?

您必須在“清單”或“設置”中授予許可權,並且根據sdk(23+),還要求用戶提供額外的許可權。 https://docs.microsoft.com/zh-CN/xamarin/android/app-fundamentals/permissions?tabs=windows

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM