2017-05-31 45 views
1

我已经创建了一个xamarin表单应用程序。我想检查iOS中蓝牙的状态。我已经使用下面的代码,但if (state == CBCentralManagerState.PoweredOn)正在返回我Unknown。它没有提供蓝牙状态的实际状态。有人可以帮我弄清楚什么是错的吗?谢谢。检查iOS中Xamarin表单的蓝牙状态

这种方法的引用是在这里:https://developer.xamarin.com/api/type/MonoMac.CoreBluetooth.CBCentralManagerState/

private CBCentralManagerState state; 

    public bool CheckBluetoothStatus() 
    { 
     bool status; 
     if (state == CBCentralManagerState.PoweredOn) 
     { 
      status= true; 
     } 
     else 
     { 
      status = false; 
     } 
     return status; 

    } 
+0

什么是你的设备?什么是操作系统版本?你创建了CBCentralManager对象吗?另外,请等到https://developer.xamarin.com/api/member/MonoMac.CoreBluetooth.CBCentralManagerDelegate.UpdatedState/p/MonoMac.CoreBluetooth.CBCentralManager/被调用来检查它。 – Larme

+0

@Larme它是一个iphone 6s。 – jones

+0

您是否创建了CBCentralManager对象? – Larme

回答

0

你应该CBCentralManager

_mgr = new CBCentralManager(); 
_mgr.UpdatedState += CBCentralManager_UpdatedState; 
void CBCentralManager_UpdatedState(object sender, EventArgs e){ 
    switch (_mgr.State) 
} 
+0

您能否提供更详细的示例? – jones

1

下标UpdatedState事件作为apple documentation这里描述,您需要初始化CBCentralManager你才能真正用它。

如果您查看CBCentralManager的Xamarin Documentation,它们将为您提供它所需的所有构造函数的列表。实现从底部

CBCentralManager(CBCentralManagerDelegate, DispatchQueue, CBCentralInitOptions) 

第二人,但你实现这之前,你需要实现CBCentralManagerDelegate。这可能是像这样简单

public class CbCentralDelegate : CBCentralManagerDelegate 
{ 
    public override void UpdatedState(CBCentralManager central) 
    { 
     if(central.State == CBCentralManagerState.PoweredOn) 
     { 
      System.Console.WriteLine("Powered On"); 
     } 
    } 
} 

现在你已经实现了委托,你应该能够从CBCentralManager获取蓝牙的状态,这样

var bluetoothManager = new CBCentralManager(new CbCentralDelegate(),DispatchQueue.DefaultGlobalQueue, 
                 new CBCentralInitOptions{ShowPowerAlert = true}); 

return bluetoothManager.State == CBCentralManagerState.PoweredOn; 

我知道它是一个虽然这是问,但希望这会帮助你。(或其他人)