Проверка состояния Bluetooth (вкл / выкл) в Xamarin. iOS - PullRequest
1 голос
/ 27 февраля 2020

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

Текущий код постоянно сообщает, что Bluetooth выключен, даже если он включен. , Любая помощь и руководство приветствуется!

public bool CheckBluetoothStatus()
        {
            bool status;

            if (state == CBCentralManagerState.PoweredOn)
            {
                status = true;
                bluetoothEnabledLbl.Text = "Bluetooth enabled";
                bluetoothEnabledAdviceLbl.Text = "Consider turning Bluetooth off if not in use or check to see if all connected devices are recognisable";

                return status;
            }
            else
            {
                status = false;
                bluetoothEnabledLbl.Text = "Bluetooth not enabled";

                return status;
            }
        }

Ответы [ 2 ]

0 голосов
/ 28 февраля 2020

Есть две точки , на которые нужно обратить внимание при разработке Xamarin iOS bluetooth .

  • Первая , вы необходимо запустить его на физическом устройстве, не может тестировать функцию Bluetooth на симуляторе устройства. Если это так, вы всегда будете получать журнал консоли с общим кодом:

2020-02-28 13: 32: 38.310442 + 0800 AppIOSBluetooth [36757: 5394891] Bluetooth не включен

  • Второй , вам нужно добавить разрешение для приложения Bluetooth в файле info.plist. При первом запуске приложения, оно покажет всплывающее окно с разрешениями.

enter image description here

Однако в info.plist вы можете легко добавить разрешение Bluetooth следующим образом и забудете другое наиболее важное разрешение:

<key>NSBluetoothPeripheralUsageDescription</key>
<string>Add BlueTooth Peripheral Permission</string>

Этого недостаточно для Bluetooth. Вам также нужно добавить другое разрешение:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>use Bluetooth</string>

Кроме того, есть официальный API, который c об использовании Bluetooth в Xamarin iOS вы можете посмотреть.

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    // Perform any additional setup after loading the view, typically from a nib.
    myDel = new MySimpleCBCentralManagerDelegate();
    var myMgr = new CBCentralManager(myDel, DispatchQueue.CurrentQueue);
}

public class MySimpleCBCentralManagerDelegate : CBCentralManagerDelegate
{
    override public void UpdatedState(CBCentralManager mgr)
    {
        if (mgr.State == CBCentralManagerState.PoweredOn)
        {
            Console.WriteLine("Bluetooth is available");
            //Passing in null scans for all peripherals. Peripherals can be targeted by using CBUIIDs
            CBUUID[] cbuuids = null;
            mgr.ScanForPeripherals(cbuuids); //Initiates async calls of DiscoveredPeripheral
                                                //Timeout after 30 seconds
            var timer = new Timer(30 * 1000);
            timer.Elapsed += (sender, e) => mgr.StopScan();
        }
        else
        {
            //Invalid state -- Bluetooth powered down, unavailable, etc.
            System.Console.WriteLine("Bluetooth is not available");
        }
    }
    public override void DiscoveredPeripheral(CBCentralManager central, CBPeripheral peripheral, NSDictionary advertisementData, NSNumber RSSI)
    {
        Console.WriteLine("Discovered {0}, data {1}, RSSI {2}", peripheral.Name, advertisementData, RSSI);
    }

}
0 голосов
/ 27 февраля 2020

Попробуйте, и если ничего не изменится, это может быть из-за версии устройства:

private CBCentralManagerState state; 
public bool CheckBluetoothStatus()
    {
        bool status;

        if (state == CBCentralManagerState.PoweredOn)
        {
            status = true;
            bluetoothEnabledLbl.Text = "Bluetooth enabled";
            bluetoothEnabledAdviceLbl.Text = "Consider turning Bluetooth off if not in use or check to see if all connected devices are recognisable";

        }
        else
        {
            status = false;
            bluetoothEnabledLbl.Text = "Bluetooth not enabled";

        }
            return status;
    }
...